目錄
1、form 表單
2、session 保存狀態
3、Admin 后臺
4、Auth 系統
1、form 表單
(1)創建 form.py 文件,并完善
from django import forms# 定義一個表單類
class Register(forms.Form):user = forms.CharField(max_length=30, label='用戶名')pw = forms.CharField(label='密碼', min_length=6, max_length=8,widget=forms.PasswordInput(attrs={'placeholder': '請輸入你的密碼:'}),error_messages={'min_length': '密碼小于6位', 'max_length': '密碼大于8位'})repw = forms.CharField(label='請再次輸入密碼', widget=forms.PasswordInput())phone = forms.RegexField(regex='^1\d{10}$', label='手機號',error_messages={'invalid': '收入的手機號格式不對'})email = forms.EmailField(label='電子郵箱')
2、session 保存狀態
(1)狀態保存
- http協議是無狀態的:每次請求都是一次新的請求,不會記得之前通信的狀態
- 客戶端與服務器端的一次通信,就是一次會話實現狀態保持的方式:在客戶端或服務器端存儲與會話有關的數據
- 存儲方式包括cookie、session,會話一般指session對象
- 使用cookie,所有數據存儲在客戶端,注意不要存儲敏感信息
- 使用session方式,所有數據存儲在服務器端,在客戶端cookie中存儲session_id
- 狀態保持的目的是在一段時間內跟蹤請求者的狀態,可以實現跨頁面訪問當前請求者的數據
? ? ? ?注意:不同的請求者之間不會共享這個數據,與請求者一一對應
(2)創建 session 狀態
# user和pw是session的鍵,u和p是變量名
request.session['user'] = u
request.session['pw'] = p
(3)查找?session 狀態
# 第一個是需要查找的鍵,第二個是沒找到鍵時返回空的值
user = request.session.get('user', '')
user = request.session.get('pw', None)
# 獲取鍵
keys = request.session.keys()
# 獲取值
values = request.session.values()
# 獲取session_key
session_key = request.session.session_key
(4)刪除?session 狀態
del user # 刪除對應鍵值對的值
request.session.clear() # 刪除數據,但是會記錄保持
request.session.flush() # 直接清空
(5)setting 中設置會話(session)管理參數
# 是否關閉瀏覽器就關閉session
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# 是否每次請求都報錯session
SESSION_SAVE_EVERY_REQUEST = False
# 設置cookie及session的失效時間,默認位兩周,單位為秒
SESSION_COOKIE_AGE = 1209600
3、Admin 后臺
(1)注冊 admin ,在 manage.py 中執行下面代碼設置 Admin 后臺的用戶名和密碼
createsuperuser
(2)在 App 的 admin.py 中注冊模板
from django.contrib import admin# Register your models here.from demo1.models import User# 注冊模版方法1
# admin.site.register(User)# 注冊模版方法2
# @admin.register(User) # 啟動方法1class Useradmin(admin.ModelAdmin):# 設置展示字段list_display = ['id', 'user', 'pw']# 使用 user 來跳轉到修改界面list_display_links = ['user']admin.site.register(User, Useradmin) # 啟動方式2
4、Auth 系統
(1)介紹
- User:User是auth模塊中維護用戶信息的關系模式(繼承了models.Model),數據庫中該表被命名為auth_user。
- Group:User對象中有一個名為groups的多對多字段,多對多關系由auth_user_groups數據表維護。Group對象可以通過user_set反向查詢用戶組中的用戶。
- Permission:Django的auth系統提供了模型級的權限控制,即可以檢查用戶是否對某個數據表擁有增(add), 改(change), 刪(delete)權限。
(2)功能
- create_user 創建用戶
- authenticate 驗證登錄
- login 記住用戶的登錄狀態
- logout 退出登錄
- is_authenticated 判斷用戶是否登錄
- login_required 判斷用戶是否登錄的裝飾器
? ? ? ?login_required的使用:
# 第一種跳轉路由的方式
@login_required(login_url='需要跳轉的路由')# 第二種跳轉路由的方式(在steeing最后添加以下代碼)
LOGIN_URL = '需要跳轉的路由'
(3)例子(創建登錄的視圖函數)
def cl_login(request):if request.method == 'POST':u = request.POST.get('user')p = request.POST.get('pw')print(u, p)if User.objects.filter(username=u):print(User.objects.all())user = authenticate(username=u, password=p)# 用戶是否存在if user:# 判斷賬號是否激活if user.is_active:# 將用戶對象添加到當前會話(session)中login(request, user)# return HttpResponse('登錄成功')return redirect(reverse('demo1:index'))else:return HttpResponse('用戶未激活')else:return HttpResponse('用戶密碼或者用戶名不正確')return render(request, 'demo1/demo3.html')