1. 程式人生 > >django 使用form驗證用戶名和密碼

django 使用form驗證用戶名和密碼

邏輯 for 正常 elf password none 文件 err inpu

form驗證可以減少查詢數據庫,所以代碼先預先驗證,有問題可以返回給前端顯示

1.在users文件夾下新建forms.py文件,用來驗證用戶名和密碼是否為空,密碼長度是否大於6

# -*- coding: utf-8 -*-
# 作者:神秘藏寶室
# 日期:2018/12/30 21:56
from django import forms


class LoginForm(forms.Form):
    username = forms.CharField(required=True)
    password = forms.CharField(required=True, min_length=6)

2.修改views.py下的LoginView的邏輯,當form出問題返回給前端login_form內容

class LoginView(View):
    def get(self, request):
        return render(request, 'login.html', {})

    def post(self, request):
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            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)
                return render(request, "index.html")
            else:
                return render(request, "login.html", {"msg": u"用戶名或者密碼錯誤!"})
        else:
            return render(request, "login.html", {"login_form": login_form})

3.前端顯示錯誤,顯示出錯誤內容

<div class="form-group marb20 {% if login_form.errors.username %}errorput{% endif %}">
                        <label>用&nbsp;戶&nbsp;名</label>
                        <input name="username" id="account_l" type="text" placeholder="手機號/郵箱" />
                    </div>
                    <div class="form-group marb8 {% if login_form.errors.password %}errorput{% endif %}">
                        <label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;碼</label>
                        <input name="password" id="password_l" type="password" placeholder="請輸入您的密碼" />
                    </div>
                    <div class="error btns login-form-tips" id="jsLoginTips">{% for key,error in login_form.errors.items %} {{ error }} {% endfor %}{{ msg }}</div>

以上代碼可以實現,錯誤選項的紅框標記,錯誤問題顯示

輸入為空

技術分享圖片

密碼長度小於6

技術分享圖片

正常的用戶名密碼錯誤,查詢數據庫後錯誤顯示

技術分享圖片

django 使用form驗證用戶名和密碼