Devinwon / article

0 stars 0 forks source link

Django2.0 ——register example #11

Open Devinwon opened 6 years ago

Devinwon commented 6 years ago

使用了django框架的自带表单进行注册,没有使用原生手写,这样比较效率,当然也可以手写,会更加灵活。 在相应的app下面,新建forms.py,专门用于定义对应app的表单。 例如login/forms.py,

from django import forms

class Regfm(forms.Form):
    username = forms.CharField(
      widget=forms.TextInput(attrs={"placeholder": "用户名5-20位", }),
      max_length=20,
      min_length=5,
      error_messages={"required": "用户名不能为空",},
      label="注册用户"
      )
    password_set = forms.CharField(
      widget=forms.PasswordInput(attrs={"placeholder": "设置密码6-20位",}),
      max_length=20,
      min_length=6,
      error_messages={"required": "密码不能为空",},
      label="输入密码")
    password_confirm = forms.CharField(
      widget=forms.PasswordInput(attrs={"placeholder": "确认密码6-20位", "required": "required",}),
      max_length=20,
      min_length=6,
      error_messages={"required": "密码不能为空",},
      label="确认密码")
    email = forms.EmailField(
      widget=forms.EmailInput(attrs={"placeholder": "邮箱(选填)",}),
      max_length=20,
      min_length=7,
      error_messages={"required": "邮箱不能为空",},
      label="输入邮箱",
      required=False,
      )

模板当中的实例代码(部分),位于login/templates/reg.html

    <div class="ui form">
      <form action="/account/reg/" method="POST" class="" id="regfm" >

            {% for field in regfm %}
                <div  id="regfield" class="">
                    {{ field.label_tag }}{{ field }} 
                    {{ field.errors}}
                </div>
            {% endfor %}
                <p id="regerr">
                    {% if err %}
                    <i class="warning circle icon red"></i>{{ err }}
                    {% endif %}
                </p>
            <input type="submit" value="注册" class="ui green button">
            <input type="reset" value="重置" class="ui gray button">
        {% csrf_token %}
        </form>
    </div>

视图处理函数,login/views.py

from django.shortcuts import render
from django.contrib.auth.models import User
from django.http import HttpResponse,HttpResponseRedirect
from django.template import Template,Context
from login.forms import Regfm
def reg(request):
    context={}
    regfm=Regfm()       
    context['regfm']=regfm
    if request.method=='GET':
        return render(request,'reg.html',context)
    else:
        try:
            regfm=Regfm(request.POST)       
            if regfm.is_valid():
                password_set=request.POST.get('password_set')
                password_confirm=request.POST.get('password_confirm')

                if password_set==password_confirm:
                    username=request.POST.get('username')
                    userResult = User.objects.filter(username__exact=username)
                    if userResult:
                        err="用户名"+username+"已经存在"
                        context["err"]=err
                    else:
                        email=request.POST.get('email')
                        User.objects.create_user(
                            username=username,
                            password=password_set,
                            email=email,
                            )
                        return HttpResponse("register success,contact with master ")
                else:
                    err="两次密码不一致"
                    context["err"]=err

            return render(request,'reg.html',context)
        except:
            return render(request,'reg.html',context)

效果示例: reg