Django 自製登入系統(cookie)

2021-08-09 06:44:38 字數 3156 閱讀 5839

預計實現**使用者註冊、登入的功能

urlpatterns = [

url(r'^login/$', views.login, name='login'),

url(r'^register/$', views.register, name='register'),

url(r'^logout/$', views.logout, name='logout')

]

一、model 使用者模型

class

user

(models.model):

user_name=models.charfield

(max_length=50)

user_email=models.charfield

(max_length=100)

user_pass_hash=models.charfield

(max_length=100)

二、表單

在form類中的clean_filename方法可以進行資料的驗證,例如下面的

def clean_user_eamil():排除兩次密碼不一致

也可以提前檢查登入使用者的資訊是否存在

class

loginform

(forms.form):

user_email = forms.charfield(label="郵箱",max_length=100)

user_password = forms.charfield(label="密碼",widget=forms.passwordinput())

class

registerform

(forms.form):

user_name=forms.charfield(label="使用者名稱", max_length=50)

user_email = forms.emailfield(label="郵箱", max_length=100,error_messages=)

user_password = forms.charfield(label="密碼", widget=forms.passwordinput())

user_password2 = forms.charfield(label="重複密碼", widget=forms.passwordinput())

defclean_user_password2

(self):

cleaned_data = super(registerform, self).clean()

user_password=cleaned_data['user_password']

user_password2= cleaned_data['user_password2']

if user_password2 != user_password:

raise forms.validationerror('兩次密碼不一致')

三、檢視

1. 獲取表單post的值包含註冊的email、username、password

2. 在資料庫建立相應使用者user.object.create()

3. 密碼要避免明文儲存

1.獲取表單post的值包含註冊的email、password

2.與資料庫的資訊比較,驗證password

3.建立cookie,使用django的set_cookie

4.其他頁面可以通過瀏覽器請求的cookie,驗證cookie,解析使用者,判斷登入狀態

下面是自己實現的cookie2user,和setcookie方法

def

setcookie

(response, user_id, user_email, user_pass_hash, secret_key):

s = '%s-%s-%s' % (user_email, user_pass_hash, secret_key)

s = hashlib.sha1(s.encode()).hexdigest()

l = ['uid:' + str(user_id), s]

cookie = '-'.join(l)

response.set_cookie('cookie_name', cookie, 60)

return response

def

cookie2user

(cookie):

try:

uid = cookie.split('-')[0].split(':')[1]

u = user.objects.filter(id=int(uid))[0]

s = '%s-%s-%s' % (u.user_email, u.user_pass_hash, secret_key)

s = hashlib.sha1(s.encode()).hexdigest()

if cookie.split('-')[1] == s:

user = u

else:

user = none

except exception:

user = none

return user

刪除cookieresponse.delete_cookie('cookiename')即可

使用了這個裝飾器的view函式,如果處於登入狀態,可以從kw[『user』]獲取到user

基於django的登入註冊系統

2.功能實現 3.小結 請檢查填寫的內容 if login form.is valid username login form.cleaned data.get username password login form.cleaned data.get password try user model...

Django使用者登入與註冊系統

乙個很有趣的個人部落格,不信你來撩 fangzengye.com collapse n bar collapse id my n n n bar n active index 主頁 a li ul n n bar n n bar right a li logout 登出 a li login 登入 ...

Django設計登入

一 流程圖 二 編輯mysite account views.py django預設的使用者認證和管理中的兩個方法 from django.contrib.auth import authenticate,login from forms import loginform 使用者登入檢視函式 def...