Django---csrf裝飾器,中介軟體思想程式設計,auth認證模組和bbs資料表分析
阿新 • • 發佈:2022-05-25
csrf相關裝飾器
from django.views.decorators.csrf import csrf_exempt,csrf_protect
csrf_exempt :忽略csrf校驗
csrf_protect:開啟csrf校驗
針對FBV
@csrf_protect\@csrf_exempt
def login(request):
return render(request,'login.html')
針對CBV
csrf_protect:三種CBV新增裝飾器的方式都可以 csrf_exempt:只有一種方式可以生效(給重寫的dispatch方法裝) # @method_decorator(csrf_protect,name='post') # 可以 # @method_decorator(csrf_exempt,name='post') # 無效 class MyView(views.View): # @method_decorator(csrf_protect) # 可以 @method_decorator(csrf_exempt) # 有效 def dispatch(self, request, *args, **kwargs): return super(MyView, self).dispatch(request,*args,**kwargs) # @method_decorator(csrf_protect) # 可以 # @method_decorator(csrf_exempt) # 無效 def post(self,request): return HttpResponse('from MyView post')
基於中介軟體思想編寫專案
importlib模組:可以通過字串的形式匯入模組
常規匯入方式
from ccc import b
from ccc.b import name # 可以直接導變數資料
print(b) # <module 'ccc.b' from '/Users/jiboyuan/PycharmProjects/day61_1/ccc/b.py'>
print(b.name)
字串匯入方式
import importlib module_path = 'ccc.b' res = importlib.import_module(module_path) print(res.name) module_path1 = 'ccc.b.name' importlib.import_module(module_path1) # 不可以 最小匯入單位是模組檔案級別
以傳送提示資訊為需求編寫功能的案例
方式1:封裝成函式
方式2:封裝成配置:
# settings NOTIFY_FUNC_LIST = [ 'notify.email.Email', 'notify.msg.Msg', 'notify.qq.QQ', 'notify.weixin.WeiXin', ] # __init__ import settings import importlib def send_all(msg): # 1.迴圈獲取配置檔案中字串資訊 for str_path in settings.NOTIFY_FUNC_LIST: # 'notify.email.Email' # 2.切割路徑資訊 module_path, class_str_name = str_path.rsplit('.', maxsplit=1) # ['notify.email','Email'] # 3.根據module_path匯入模組檔案 module = importlib.import_module(module_path) # 4.利用反射獲取模組檔案中對應的類名 class_name = getattr(module, class_str_name) # Email Msg QQ # 5.例項化 obj = class_name() # 6.呼叫傳送訊息的功能 obj.send(msg)
auth認證模組
我們在開發一個網站的時候,無可避免的需要設計實現網站的使用者系統。此時我們需要實現包括使用者註冊、使用者登入、使用者認證、登出、修改密碼等功能,這還真是個麻煩的事情呢。
Django作為一個完美主義者的終極框架,當然也會想到使用者的這些痛點。它內建了強大的使用者認證系統--auth,它預設使用 auth_user 表來儲存使用者資料。
django自帶的admin後臺管理使用者登入參考的就是auth_user表。
建立admin後臺管理員使用者
tools---run manage.py task---執行createsuperuser
自動對使用者密碼進行加密處理並儲存
auth模組方法大全
1.驗證使用者名稱和密碼是否正確
auth.authenticate() # 校驗正確返回的是使用者物件 錯誤返回的是None
2.儲存使用者登入狀態
auth.login() # 自動幫你操作session相關
3.獲取當前使用者物件
request.user # 獲取當前登入的使用者物件 或者是 匿名使用者
4.判斷當前使用者是否登入
request.user.is_authenticated() # 判斷使用者是否登入 返回布林值
5.校驗登入裝飾器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/lg/') # 區域性配置
@login_required # 全域性配置
LOGIN_URL = '/lg/' # 需要在配置檔案中新增配置
6.修改密碼
request.user.check_password() # 自動加密再比對
request.user.set_password() # 臨時修改密碼
request.user.save() # 將修改操作同步到資料庫中
7.登出登入
auth.logout(request)
8.註冊使用者
from django.contrib.auth.models import User
User.objects.create_superuser(username='admin',password='123',email='[email protected]') # 管理員
User.objects.create_user(username='oscar',password='123') # 普通使用者
auth擴充套件表字段
方式1:編寫一對一表關係(瞭解)
方式2:類繼承(推薦)
# settings
'''告訴auth模組 不再使用auth_user 而是使用自定義的表'''
AUTH_USER_MODEL = 'app01.Users'
# models
from django.contrib.auth.models import AbstractUser
class Users(AbstractUser):
# 編寫AbstractUser類中沒有的欄位 不能衝突!!!
phone = models.BigIntegerField()
addr = models.CharField(max_length=32)
注意:
- 類繼承之後,需要重新執行資料庫遷移命令,並且庫裡面是第一次操作才可以
- auth模組所有的方法都可以直接在自定義模型類上面使用,自動切換參照表
專案開發流程和bbs資料表分析
開發流程
1.需求分析
2.技術選型
3.分組開發
4.提交測試
5.交付上線
我們以後寫專案,一般都是從資料庫設計開始!!!一個好的資料庫設計 會讓我們寫程式碼變得非常的輕鬆。
bbs資料表分析
步驟:
- 先確定表
- 再確定欄位
- 最後確定關係
表名 | 欄位名 |
---|---|
使用者表 | 繼承AbstractUser |
個人站點表 | 站點名稱、標題、樣式 |
文章表 | 標題、簡介、內容、釋出時間 |
文章分類表 | 分類名稱 |
文章標籤表 | 標籤名稱 |
文章點贊點踩表 | 文章、使用者、贊/踩 |
文章評論表 | 文章、使用者、評論內容、評論時間 |