一.用戶名注冊校驗功能(后端部分)
1接口設(shè)計
1.1說明
條目 | 說明 |
---|---|
請求方法 | GET |
url定義 | /username/(?P<username>\w{5,20}) / |
參數(shù)格式 | url路徑參數(shù) |
1.2 參數(shù)說明
參數(shù)名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
username | 字符串 | 是 | 輸入的用戶名 |
1.3 返回數(shù)據(jù)
返回結(jié)果(json數(shù)據(jù)):
{
"errno":"0",
"errmsg":"ok",
"data":{
"username":"username", #查詢用戶名
"count":1, #查詢用戶數(shù)量
}
}
1.4 截圖與代碼
verification_views 的新增代碼
:
#因為需要從數(shù)據(jù)庫查詢,所以導入User模型
from user.models import User
def check_username_view(request,username):
'''
校驗用戶名
url:/username/?P<username>\w{5,20}/
:param request:
:param username:
:return:
'''
#查詢數(shù)據(jù)庫然后返回
data = {
"errno": "0",
"errmsg": "ok",
"data": {
"username": username, # 查詢用戶名
"count": User.objects.filter(username=username).count(), # 查詢用戶數(shù)量
}
}
#返回json數(shù)據(jù)
return JsonResponse(data)
01verification_view.jpg
verification_urls 的新增代碼
:
re_path('username/(?P<username>\w{5,20})/',views.check_username_view,name='check_username'),
注意 (?P<username>\w{5,20})/
這個()
一定 要加上葱她,不然會報錯
02verification_urls.jpg
03返回結(jié)果.jpg
二.用戶名注冊校驗功能(前端部分)
首先定義狀態(tài)變量,注意每個完整的功能寫完之后要加 结执;
let isUsernameReady = false,
//密碼是否準備
isPasswordReady = false,
//手機是否準備
isMobileReady = false,
//短信驗證碼是否準備
isSmsCodeReady = false ;
然后 校驗功能
//用戶名校驗,鼠標離開用戶名輸入框就校驗
let $username = $('#username');
//blur()光標移開事件
$username.blur(fnCheckUsername);
校驗用戶名
//校驗用戶名
isUsernameReady = false;
//獲取輸入的用戶名
let sUsername = $username.val();
//用戶名為空
if (sUsername === ''){
message.showError('用戶名不能為空');
//切記要返回膜眠,不然會一直運行
return
}
//用戶名格式不正確
if (!(/^\w{5,20}$/).test(sUsername)){
message.showError('請輸入5-20位的用戶名');
return
}
發(fā)送ajax
$.ajax({
url: '/username/'+ sUsername + '/',
type: 'GET',
dataType:'json',
success:function (res) {
if (res.data.count !== 0){
message.showError(res.data.username + '用戶名已被注冊哀卫,請重新輸入')
}else {
message.showInfo(res.data.username + '可以使用')
}
},
error:function () {
message.showError('服務(wù)器連接超時蝗罗,請重試')
}
})
完整的代碼
//2. 校驗功能
//用戶名校驗,鼠標離開用戶名輸入框就校驗
let $username = $('#username');
//blur()光標移開事件
$username.blur(fnCheckUsername);
function fnCheckUsername() {
//校驗用戶名
isUsernameReady = false;
//獲取輸入的用戶名
let sUsername = $username.val();
//用戶名為空
if (sUsername === ''){
message.showError('用戶名不能為空');
//切記要返回躁锁,不然會一直運行
return
}
//用戶名格式不正確
if (!(/^\w{5,20}$/).test(sUsername)){
message.showError('請輸入5-20位的用戶名');
return
}
//發(fā)送ajax
$.ajax({
url: '/username/'+ sUsername + '/',
type: 'GET',
dataType:'json',
success:function (res) {
if (res.data.count !== 0){
message.showError(res.data.username + '用戶名已被注冊拄显,請重新輸入')
}else {
message.showInfo(res.data.username + '可以使用')
}
},
error:function () {
message.showError('服務(wù)器連接超時裁蚁,請重試')
}
})
}
同理密碼校驗也是一樣
// 3.檢測密碼是否一致
let $passwordRepeat = $('input[name="password_repeat"]');
$passwordRepeat.blur(fnCheckPassword);
function fnCheckPassword () {
isPasswordReady = false;
let password = $('input[name="password"]').val();
let passwordRepeat = $passwordRepeat.val();
if (password === '' || passwordRepeat === ''){
message.showError('密碼不能為空');
return
}
if (password !== passwordRepeat){
message.showError('兩次密碼輸入不一致');
return
}
if (password === passwordRepeat){
isPasswordReady = true
}
}
三、手機號注冊校驗
1接口設(shè)計
1.1說明
條目 | 說明 |
---|---|
請求方法 | GET |
url定義 | /mobile/(?P<mobile>1[3,9]\d{9}) / |
參數(shù)格式 | url路徑參數(shù) |
1.2 參數(shù)說明
參數(shù)名 | 類型 | 是否必須 | 描述 |
---|---|---|---|
mobile | 字符串 | 是 | 輸入的手機號碼 |
1.3 返回數(shù)據(jù)
返回結(jié)果(json數(shù)據(jù)):
{
"errno":"0",
"errmsg":"ok",
"data":{
"mobile":mobile, #查詢電話號碼
"count":1, #查詢電話號碼數(shù)量
}
}
1.4 截圖與代碼
因為與user的功能大同小異 所以直接復制改參數(shù)
# 檢驗手機號碼
def check_mobile_view(request,mobile):
'''
校驗手機號碼
url:/mobile/(?P<mobile>1[3,9]\d{9})/
:param request:
:param username:
:return:
'''
#查詢數(shù)據(jù)庫然后返回
data = {
"errno": "0",
"errmsg": "ok",
"data": {
"mobile": mobile, # 查詢手機號
"count": User.objects.filter(mobile=mobile).count(), # 查詢手機號碼數(shù)量
}
}
#返回json數(shù)據(jù)
return JsonResponse(data)
07verification_view.jpg
四.手機校驗功能(前端部分)
由于跟用戶名叫校驗邏輯一樣继准,可以復制并修改變量
//4.校驗手機號碼
let $mobile = $('#mobile');
//blur()光標移開事件
$mobile.blur(fnCheckMobile);
功能實現(xiàn)
function fnCheckMobile() {
isMobileReady = false;
let sMobile = $mobile.val();
if (sMobile === ''){
message.showError('手機號碼不能為空枉证,請重新輸入!');
return
}
if (!(/^1[3,9]\d{9}$/).test(sMobile)){
message.showError('請重新輸入11位的手機號碼移必!');
return
}
//發(fā)送ajax
$.ajax({
url: '/mobile/'+ sMobile + '/',
type: 'GET',
dataType:'json',
success:function (res) {
if (res.data.count !== 0){
message.showError('手機號碼'+res.data.mobile + '已被注冊室谚,請重新輸入');
}else {
message.showInfo('手機號碼'+res.data.mobile + '可以使用');
isMobileReady = true
}
},
error:function () {
message.showError('服務(wù)器連接超時,請重試');
}
})
}
五崔泵、整合優(yōu)化(json響應(yīng)數(shù)據(jù)結(jié)構(gòu)設(shè)計)
目的
1.減少代冗余(重復)秒赤,提高復用性,解耦
(https://baike.baidu.com/item/%E8%A7%A3%E8%80%A6
)
2.分工協(xié)作更容易
1.結(jié)構(gòu)設(shè)計
{
"errno":"0",
"errmsg":"ok",
"data":{
"mobile":mobile, #查詢電話號碼
"count":1, #查詢電話號碼數(shù)量
}
}
字段分析
條目 | 類型 | 說明 |
---|---|---|
errno | 字符串 | 錯誤編碼 |
errmsg | 字符串 | 錯誤信息 |
data | json | 返回數(shù)據(jù) |
錯誤編碼聲明
class Code:
OK = "0"
DBERR = "4001"
NODATA = "4002"
DATAEXIST = "4003"
DATAERR = "4004"
METHERR = "4005"
SMSERROR = "4006"
SMSFAIL = "4007"
SESSIONERR = "4101"
LOGINERR = "4102"
PARAMERR = "4103"
USERERR = "4104"
ROLEERR = "4105"
PWDERR = "4106"
SERVERERR = "4500"
UNKOWNERR = "4501"
error_map = {
Code.OK: "成功",
Code.DBERR: "數(shù)據(jù)庫查詢錯誤",
Code.NODATA: "無數(shù)據(jù)",
Code.DATAEXIST: "數(shù)據(jù)已存在",
Code.DATAERR: "數(shù)據(jù)錯誤",
Code.METHERR: "方法錯誤",
Code.SMSERROR: "發(fā)送短信驗證碼異常",
Code.SMSFAIL: "發(fā)送短信驗證碼失敗",
Code.SESSIONERR: "用戶未登錄",
Code.LOGINERR: "用戶登錄失敗",
Code.PARAMERR: "參數(shù)錯誤",
Code.USERERR: "用戶不存在或未激活",
Code.ROLEERR: "用戶身份錯誤",
Code.PWDERR: "密碼錯誤",
Code.SERVERERR: "內(nèi)部錯誤",
Code.UNKOWNERR: "未知錯誤",
}
2憎瘸、創(chuàng)建快捷方法
def json_response(errno=Code.OK,errmsg='',data=None,kwargs=None):
json_dict= {
'errno':errno,
'errmsg':errmsg,
'data':data,
}
if kwargs and isinstance(kwargs,dict):
json_dict.update(kwargs)
return JsonResponse(json_dict)
views 新的代碼
from utils.res_code import json_response
#檢驗用戶名
def check_username_view(request,username):
'''
校驗用戶名
url:/username/?P<username>\w{5,20}/
:param request:
:param username:
:return:
'''
#查詢數(shù)據(jù)庫然后返回
data = {
"username": username, # 查詢用戶名
"count": User.objects.filter(username=username).count(), # 查詢用戶數(shù)量
}
#返回json數(shù)據(jù)
return json_response(data=data)
def check_mobile_view(request,mobile):
'''
校驗手機號碼
url:/mobile/(?P<mobile>1[3,9]\d{9})/
:param request:
:param username:
:return:
'''
#查詢數(shù)據(jù)庫然后返回
data = {
"mobile": mobile, # 查詢用戶名
"count": User.objects.filter(mobile=mobile).count(), # 查詢用戶數(shù)量
}
#返回json數(shù)據(jù)
return json_response(data=data)
效果圖
08效果圖.jpg
最后別忘記推送到 碼云
$ git add .
$ git commit -m 'update projects'
$ git push origin master