1. 程式人生 > >[py][mx]django使用class寫views-免去判斷方法的煩惱

[py][mx]django使用class寫views-免去判斷方法的煩惱

() 使用 判斷 index quest .post 驗證 9.png users

修改views使用class模式

類模式寫views - 免去了函數模式的判斷的煩惱

users/views.py

from django.views.generic import View

class UserView(View):#繼承了View類,它裏面實現get post等方法, 使用類模式寫免去了函數模式的判斷
    def get(self, request):
        return render(request, "login.html", {})

    def post(self, request):
        user_name = request.POST.get("username", "")
        pass_word = request.POST.get("password", "")
        user = authenticate(username=user_name, password=pass_word)
        if user is not None:  # 用戶名密碼驗證成功
            login(request, user)  # django執行用戶登錄
            return render(request, "index.html")
        else:
            return render(request, "login.html", {'msg': "用戶名或密碼錯誤"})

函數模式寫views - 需要手動判斷方法,有點麻煩

users/views_old.py

def user_login(request):
    if request.method == "POST":
        user_name = request.POST.get("username", "")
        pass_word = request.POST.get("password", "")
        user = authenticate(username=user_name, password=pass_word)
        if user is not None:  # 用戶名密碼驗證成功
            login(request, user)  # django執行用戶登錄
            return render(request, "index.html")
        else:
            return render(request, "login.html", {'msg': "用戶名或密碼錯誤"})

    elif request.method == "GET":
        return render(request, "login.html", {})

技術分享圖片

修改urls.py 調用views裏對應的類

from django.views.generic import TemplateView
from users import views

urlpatterns = [
    path('', TemplateView.as_view(template_name='index.html'), name="index"),
    path('login/', views.UserView.as_view(), name="login"),
    path('xadmin/', xadmin.site.urls),
]

技術分享圖片

[py][mx]django使用class寫views-免去判斷方法的煩惱