本文主要向大家分享了Python編程中通過Django模塊實現用戶注冊以及郵箱驗證功能的簡單介紹及代碼實現,具體如下。
用戶注冊:
類似于用戶登陸,同樣在users.views.py中添加RegisterView(View)類,其中對表單的get和post作出處理。
如果是get方法,重新返回register頁面讓用戶進行填寫。
def get(self, request): register_form = RegisterForm() return render(request, "register.html", {'register_form':register_form})method = POST時,用戶注冊邏輯:
def post(self, request): # 實例化form,驗證每個字段是否合法 register_form = RegisterForm(request.POST) pre_check = register_form.is_valid() if pre_check: # 取出email和password user_name = request.POST.get("email", "") pass_word = request.POST.get("password", "") # 實例化用戶,然后賦值 user_profile = UserProfile() user_profile.username = user_name user_profile.email = user_name # 新建用戶為非活躍用戶,可通過驗證變為活躍用戶 user_profile.is_active = False # 將明文轉換為密文賦給password user_profile.password = make_password(pass_word) user_profile.save() # 保存到數據庫 # 此處加入了郵箱驗證的手段 send_register_email(user_name, "register") return render(request, "login.html") else: # form表單驗證失敗,將錯誤信息傳給前端 return render(request, "register.html", {"register_form": register_form})在form.py中添加RegisterForm類對給出表單處理類:
class RegisterForm(forms.Form): # 不能為空 email = forms.EmailField(required=True) password = forms.CharField(required=True, min_length=6, max_length=20) # 出錯信息 captcha = CaptchaField(error_messages={"invalid":u"驗證碼錯誤"})以下為對應的前端代碼,其中添加了了django的模版用法,均以{% %}的形式在html中加入邏輯, 避免了python代碼的直接插入,方便維護和修改。
<form id="email_register_form" method="post" action="{% url 'register' %}" autocomplete="off"> <div class="form-group marb20 {% if register_form.errors.email %}errorput{% endif %}"> <label>郵 箱</label> <input type="text" id="id_email" name="email" value="{{ register_form.email.value }}" placeholder="請輸入您的郵箱地址" /> </div> <div class="form-group marb8 {% if register_form.errors.password %}errorput{% endif %}"> <label>密 碼</label> <input type="password" id="id_password" name="password" value="{{ register_form.password.value }}" placeholder="請輸入6-20位非中文字符密碼" /> </div> <div class="form-group marb8 captcha1 {% if register_form.errors.captcha %}errorput{% endif %}"> <label>驗 證 碼</label> {{ register_form.captcha }} </div> <div class="error btns" id="jsEmailTips">{% for key,error in register_form.errors.items %}{{ error }}{% endfor %} {{ msg }}</div> <div class="auto-box marb8"> </div> <input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注冊并登錄" /> {% csrf_token %} </form>
新聞熱點
疑難解答