優缺點:缺少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是否為空,如果不為空則進行資料庫的查詢,判斷是...