Django操作資料庫實現註冊&登入驗證
阿新 • • 發佈:2019-01-03
前幾天就做完了這個登入&註冊的後臺(我覺得做後臺比做前端省事多了),一直沒空寫……今天抽空給他寫出來做下記錄。
Model 定義
沒啥說的,直接放程式碼
from django.db import models
class UserInfo(models.Model):
user_id = models.IntegerField(primary_key=True)
user_name = models.CharField(max_length=30)
pass_word = models.CharField(max_length=64)
user_token = models.CharField(max_length=64 )
token_last_modified = models.DateTimeField()
def __unicode__(self):
return self.user_name
前端發來的資料處理
圖省事,前端直接發Json過來。不多說,直接扔程式碼~
#登入
@ensure_csrf_cookie
def login_authentication(request):
if request.method != "POST":
return HttpResponse()
login_state = {}
try :
user_info = json.loads(bytes.decode(request.body))
db_info = UserInfo.objects.get(user_name=user_info["userName"])
if db_info.pass_word == user_info["userPassWD"]:
login_state['authState'] = AuthEnum.LoginSuccess
login_state['userID'] = db_info.user_id
login_state['userToken' ] = db_info.user_token
else:
raise ObjectDoesNotExist()
except ObjectDoesNotExist:
login_state['authState'] = AuthEnum.PasswordNotMatch
except KeyError:
login_state['authState'] = AuthEnum.BrokenJson
finally:
http_response = HttpResponse(json.dumps(login_state))
return http_response
django收到的request,body是的格式為bytes。所以需要先decode,然後才能json.load()轉成json。
對於json的訪問跟字典很像,Key-Value。
其次就是Django獲取資料庫的內容了。
UserInfo.objects.get,一個函式,就可以獲得這個物件了。如果沒有找到,會丟擲ObjectDoesNotExist異常。
對於得到的物件的其他值的訪問,通過 obj.name即可訪問。
最後就是字典轉json這個,使用json.dumps即可~
註冊功能的實現
# 直接網上找的隨機字串生成程式碼= =
def get_random_str(random_str_length=64):
strings = ''
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
length = len(chars) - 1
random = Random()
for i in range(random_str_length):
strings += chars[random.randint(0, length)]
return strings
# 資料驗證
def valid_register_info(info):
if info["userName"] == "" or len(info["userPassWD"]) != 64:
print(info["userName"])
print(len(info["userPassWD"]))
raise KeyError
# 註冊
@ensure_csrf_cookie
def register_user(request):
if request.method != "POST":
return HttpResponse()
register_state = {}
user_info = json.loads(bytes.decode(request.body))
try:
valid_register_info(user_info)
UserInfo.objects.get(user_name=user_info["userName"])
register_state['authState'] = RegisterEnum.UserNameDuplication
except ObjectDoesNotExist:
if UserInfo.objects.last() is None:
user_id = 1
else:
user_id = UserInfo.objects.last().user_id + 1
UserInfo.objects.create(user_name=user_info["userName"], user_id=user_id,
pass_word=user_info["userPassWD"], user_token=get_random_str(64),
token_last_modified=timezone.now())
register_state['authState'] = RegisterEnum.RegisterSuccess
except KeyError:
register_state['authState'] = RegisterEnum.BrokenJson
finally:
http_response = HttpResponse(json.dumps(register_state))
return http_response
挑重點的說吧
UserInfo.objects.create,往資料庫新增資料,後面跟著值。
UserInfo.objects.last(),獲取資料庫中最後一條記錄,若資料庫為空,則返回None。
我覺得沒什麼說的了……
附加
python3 manage.py makemigrations
yisilepython3 manage.py migrate
相信各位知道我什麼意思了……