本文主要向大家分享了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>
新闻热点
疑难解答