1. 程式人生 > >Django練習——用戶管理系統——補充知識點

Django練習——用戶管理系統——補充知識點

路由 .py 裝飾器 views session dispatch 分發 clas int

補充知識點:

1.FBV 和 CBV

views.py
# 方法一:FBV
def login(request):
    if request.method == "POST":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        c = models.Administrator.objects.filter(username=user,password=pwd).count()
        print(c)
        if c:
            #設置session中存儲的數據
request.session["is_login"] = True request.session["username"] = user #尤其註意跳轉到哪個頁面!!! return render(request,"index.html",{"username":user}) else: msg = "用戶名或密碼錯誤" return redirect("/login.html",{"msg":msg}) return render(request,"
login.html")


urs.py
# url(r‘^login.html$‘, views.login),

cbv:

#CBV
from django import views
class Login(views.View):
    def get(self,request,*args,**kwargs):
        return render(request, "login.html")

    def post(self,request,*args,**kwargs):
        user = request.POST.get("user")
        pwd 
= request.POST.get("pwd") c = models.Administrator.objects.filter(username=user, password=pwd).count() print(c) if c: #設置session中存儲的數據 request.session["is_login"] = True request.session["username"] = user #尤其註意跳轉到哪個頁面!!! return render(request,"index.html",{"username":user}) else: msg = "用戶名或密碼錯誤" return redirect("/login.html",{"msg":msg})


urs.py

url(r‘^login.html$‘, views.Login.as_view()),#以類的方式進行創建

2.類中用裝飾器

方法一:自定義裝飾器

from django import views
from django.utils.decorators import method_decorator#1.引入庫
#2.定義裝飾器函數
def outer(func):
    def inner(request,*args,**kwargs):
        print(request.method)
        return func(request,*args,**kwargs)
    return inner

class Login(views.View):
    #3.使用裝飾器
    @method_decorator(outer)
    def get(self,request,*args,**kwargs):
        return render(request, "login.html")

方法二:自定義dispatch方法,同時繼承父類該方法,等同於裝飾器

from django import views

class Login(views.View):
    #1.先執行自定義的dispatch方法
    def dispatch(self, request, *args, **kwargs):
        print(11111)
        if request.method == "GET":
            return HttpResponse("ok")
        #2.再調用父類中的dispatch方法,dispatch方法類似路由分發
        ret = super(Login,self).dispatch(request, *args, **kwargs)
        print(22222)
        return ret

    def get(self,request,*args,**kwargs):
        return render(request, "login.html")

    def post(self,request,*args,**kwargs):
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        c = models.Administrator.objects.filter(username=user, password=pwd).count()
        print(c)
        if c:
            #設置session中存儲的數據
            request.session["is_login"] = True
            request.session["username"] = user
            #尤其註意跳轉到哪個頁面!!!
            return render(request,"index.html",{"username":user})
        else:
            msg = "用戶名或密碼錯誤"
            return redirect("/login.html",{"msg":msg})

 

Django練習——用戶管理系統——補充知識點