注册视图

1.设计forms表单模型

class RegisterForm(forms.Form):
    gender=(
        ('male',"男"),
        ('female',"女"),
    )

    username=forms.CharField(label='用户名',max_length=64,widget=forms.TextInput(attrs={'class':'form-control','placeholder':'用户名'}))
    password1=forms.CharField(label='密码',max_length=512,widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'密码'}))
    password2 = forms.CharField(label='密码', max_length=512,widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': '密码'}))
    email=forms.EmailField(label='邮箱',widget=forms.EmailInput(attrs={'class':'form-control'}))
    sex=forms.ChoiceField(label='性别',choices=gender)
    captcha=CaptchaField(label='验证码')

2.注册页面

{% extends 'base.html' %}  <!--继承base网页模板内容,可以浏览网页查看效果-->
{% block title %}注册{%  endblock %}  <!--设置title,默认使用base模板中的-->

{% block content %}   <!--该模板语言用于定义主体内容,和模板中的结合使用-->
    <div class="container">
        <div class="col-md-4 col-md-offset-4">
          <form class='form-login' action="/register/" method="POST">
              {% if message %}      <!--类似if语句-->
                  <div class="alert alert-warning">{{ message }}</div>  <!--使用bootstrap的警示传递message信息-->
              {% endif %}
              {% csrf_token %}
              <h2 class="text-center">欢迎注册</h2>
                <div class="form-group">
                  {{ register_form.username.label_tag }}
                  {{ register_form.username}}
                </div>
                <div class="form-group">
                  {{ register_form.password1.label_tag }}
                  {{ register_form.password1 }}
                </div>
              <div class="form-group">
                  {{ register_form.password2.label_tag }}
                  {{ register_form.password2 }}
                </div>
              <div class="form-group">
                  {{ register_form.email.label_tag }}
                  {{ register_form.email }}
                </div>
              <div class="form-group">
                  {{ register_form.sex.label_tag }}
                  {{ register_form.sex }}
                </div>
                <div class="form-group">
                    {{ register_form.captcha.errors }}   <!--当验证码输入不正确时显示-->
                    {{ register_form.captcha.label_tag }}  <!--用于表示label的页面显示-->
                    {{ register_form.captcha }}            <!--用于captcha的input标签显示-->
                </div>

              <button type="reset" class="btn btn-default pull-left">重置</button>
              <button type="submit" class="btn btn-primary pull-right">提交</button>
          </form>
        </div>
    </div> 
{% endblock %}

3.注册视图

def register(request):
    if request.session.get('is_login'):     #如果是登陆状态就跳转至主页
        return redirect('/index/')
    if request.method=='POST':             #提交post类型的表单数据
        register_form=forms.RegisterForm(request.POST)      #把注册的form表单存储到register_form变量中
        message='请检查填写的内容!'             #这个是用于提示输入有误的反馈变量
        if register_form.is_valid():            #如果注册的内容合法,就继续下面的内容
            #获取web页面输入框输入的信息
            username=register_form.cleaned_data['username']
            password1=register_form.cleaned_data['password1']
            password2=register_form.cleaned_data['password2']
            email=register_form.cleaned_data['email']
            print(email)
            sex=register_form.cleaned_data['sex']
            #判断输入的两次密码是否一致
            if password1!=password2:        #如果两次输入的密码不一致
                message='两次密码输入不一致'     #提示输入不一致
                return render(request,'login/register.html',{'message':message,'register_form':register_form})
            else:
                user=User.objects.filter(name=username)
                if user:
                    message='用户名已存在,请重新输入'
                    return render(request,'login/register.html',{'message':message,'register_form':register_form})
                get_email=User.objects.filter(email=email)
                if get_email:
                    message='邮箱已被注册,请更换邮箱注册!'
                    return render(request,'login/register.html',{'message':message,'register_form':register_form})

                #没问题就进行注册
                new_user=User()
                new_user.name=username
                new_user.password=password1
                print(email)
                new_user.email=email
                print(new_user.email)
                new_user.sex=sex
                new_user.save()         #保存到表中
                return redirect('/login/')      #注册完成后跳转到登陆页面
    register_form=forms.RegisterForm()      #保留输入的错误字段
    return render(request,'login/register.html',{'register_form':register_form})  #这里用于传递输入过的错误信息到界面



    # return render(request,'login/register.html')    #未登陆就跳转到注册页面

def logout(request):
    if not request.session.get('is_login'):   #如果登陆状态为未登陆
        return redirect('/index/')              #就跳转至主页(也就是依然停留在当前页面)
    request.session.flush()             #清除session记录
    return redirect('/index/')          #返回主页

4.修改base模板页面

    <nav class="navbar navbar-default" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="#">主页</a>
        </div>
        <ul class="nav navbar-nav navbar-right">
            {% if request.session.is_login %}   <!--views.py文件中登陆成功后赋值未True,这里拿到True后就进入判断语句-->
                <li><a href="#">当前在线:{{ request.session.user_name }}</a></li>   <!--这里显示的是views文件中输入的username,也就是当前登陆成功的用户名-->
                <li><a href="/logout/">登出</a></li>      <!--导航条点击登出跳转至登出页面-->
            {% else %}   <!--如果登陆成功就不会执行下面的代码,避免出现登陆成功后依然显示注册登陆的情况,另外登出或未登陆时访问网页才会出现下面的内容-->
            <li><a href="/register/"><span class="glyphicon glyphicon-user"></span> 注册</a></li>      <!--导航条点击注册跳转至注册页面-->
            <li><a href="/login/"><span class="glyphicon glyphicon-log-in"></span> 登录</a></li>   <!--导航条点击登陆跳转至登陆页面-->
            {% endif %}
        </ul>
    </div>
    </nav>
  {% block content %}{% endblock %}  <!--为具体主体内容留下接口-->

5.查看注册页面