關於Django登入功能實現的幾種方案

2022-09-14 03:33:12 字數 4132 閱讀 9547

優缺點:缺少css樣式,適合敏捷開發,對於前端樣式上需要花一些功夫;好處就是錯誤提示不需要我們刻意去實現

具體實現:

urls.py:

from django.contrib.auth import views as auth_views

from account.forms import myauthenticationform

urlpatterns = [

path('login/', auth_views.loginview.as_view(

template_name="account/login.html", authentication_form=myauthenticationform),name='login'), #登入用

path('logout/', auth_views.logoutview.as_view(next_page="/"), name='logout'), #登出用

forms.py:

from django.contrib.auth.forms import authenticationform,

from captcha.fields import captchafield,captchatextinput # 驗證碼,可以不加

# 驗證碼,可以不加

class customcaptchatextinput(captchatextinput):

template_name = 'custom_captcha.html'

class myauthenticationform(authenticationform):

captcha = captchafield(label="驗證碼", required=true,error_messages=,

widget=customcaptchatextinput) # 這個是實現驗證碼,可以不加

def __init__(self, *args, **kwargs):

super(myauthenticationform, self).__init__(*args, **kwargs)

self.fields['username'].widget.attrs['placeholder'] = u'輸入賬號'

self.fields['password'].widget.attrs['placeholder'] = u'輸入密碼'

self.fields['captcha'].widget.attrs['placeholder'] = u'驗證碼' #可以不加

login.html:

優缺點:雖然自定義程度較高,但是更符合我們的預期,可控的前端樣式;不需要根據表單渲染出的id再去寫css樣式

if f.is_valid(): # 通過form校驗資料格式

user_obj = authenticate(username=f.cleaned_data["username"], password=f.cleaned_data["password"]) # 認證提交的表單是否滿足資料庫記錄

if user_obj:

login(request, user_obj) # 登入當前使用者

next_url = self.get_redirct_url(user_obj) # 這裡通過鑑定使用者角色,返回相應的url

if next_url:

messages.success(request, "歡迎登入")

return redirect(next_url)

messages.success(request, '登入失敗,錯誤的賬號密碼')

return redirect('home')

def get_redirct_url(self, user):

# 判斷使用者屬組,重定向至相應的頁面

client_group = user.groups.filter(name="client")

doctor_group = user.groups.filter(name="doctor")

if client_group:

return reverse("client:home") # /client/index/

elif doctor_group:

return reverse("doctor:home")

elif user.is_superuser:

return reverse("admin:index")

forms.py

from django import forms

class customcharfield(forms.charfield):

# 繼承charfield並為其新增class使其帶有bootstrap樣式

def __init__(self, *, max_value=none, min_value=none, **kwargs):

super().__init__(**kwargs)

def widget_attrs(self, widget):

attrs = super().widget_attrs(widget)

attrs["class"] = 'form-control form-control-sm bg-light'

attrs["placeholder"] = self.label

return attrs

class loginform(forms.form):

username = customcharfield(

label="username",

widget=forms.textinput(

attrs=))

password = customcharfield(

label="password",

strip=false,

widget=forms.passwordinput(attrs=),

)

home.html

優缺點:新引入的包不僅省了方案二的自定義field,還帶了其他功能,這裡只寫form渲染。缺點就是為了渲染欄位而引入乙個包。

...參考方案二

pip:

# 兩個包都可以:django-bootstrap、django-crispy-forms

pip install django-bootstrap

# 或pip install django-crispy-forms

forms.py \ views.py \ urls.py參考方案二

index.html:

Django 實現登入功能

使用者能註冊賬戶之後,接下來要讓使用者能夠登入。為此,要執行以下幾步 定義乙個檢視,處理登入憑據 建立乙個模板,顯示登入表單 把登入檢視對映到乙個 url 上 在首頁新增登入鏈結 定義登入檢視 首先,開啟 rango 應用的 views.py 模組,定義乙個新檢視,名為 user login 這個檢...

Django連線MySQL實現登入功能

terminal中命令列 建立遷移檔案 python3 manage.py makemigrations stu執行遷移 python3 manage.py migrate資料庫中的表生成後,往表中插入資料。以方便後期登入匹配操作。did you install mysqlclient?修改 ini...

關於實現自動登入功能

這邊session用來儲存使用者登入的唯一標識,用來判使用者資訊。cookie用來記住密碼,直接呼叫cookie就可以實現自動登入。public static bool checkcookieinfo return false 用來判斷使用者cookie是否為空,如果不為空則進行資料庫的查詢,判斷是...