🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
项目app 【forms.py】文件配置 ~~~ # _*_ coding:utf-8 _*_ __author__ = 'canmeng' __date__ = '2018/1/8 12:54' from django import forms from django.contrib.auth.models import User #注册引入 #用户登录 class LoginFrom(forms.Form): username = forms.CharField() password = forms.CharField(widget=forms.PasswordInput) #用户注册 class RegistrationFrom(forms.ModelForm): password = forms.CharField(label="password", widget=forms.PasswordInput) password2 = forms.CharField(label="Confirm password", widget=forms.PasswordInput) class Meta: model = User #fields 用于指定表单的字段 fields = ("username", "email") def clean_password2(self): cd = self.cleaned_data if cd['password'] != cd['password2']: raise forms.ValidationError("password do not match.") return cd['password2'] ~~~ view配置 ~~~ # _*_ coding:utf-8 * _*_ from django.shortcuts import render, redirect#redirect跳转 #引入系统模块 from django.http import HttpResponse #引入内置用户管理 from django.contrib.auth import authenticate, login #引入forms类 from .forms import LoginFrom, RegistrationFrom # Create your views here. #登录函数 def user_login(request): #method是HttpRequest对象的一个常用属性,可返回POST、GET if request.method == "POST": login_form = LoginFrom(request.POST) #is_valid验证传入数据是否合法性 if login_form.is_valid(): #cleaned_data引用一个字典类型数据 cd = login_form.cleaned_data #authenticate检验数据库帐号密码是否正确 user = authenticate(username=cd['username'], password=cd['password']) #login引入的login()函数,已语句user实例对象作为参数,实现用户登录,登录后调用session if user: #判断正确返回HttpResponse login(request, user) #redirect跳转 return redirect("blog:blog_title") #return HttpResponse("Wellcome YOU") else: return HttpResponse("Sorry") if request.method == "GET": login_form = LoginFrom() return render(request, "account/login.html", {"form":login_form}) #注册函数 def register(request): if request.method == "POST": #用这些数据实例化一个用户注册表单 user_form = RegistrationFrom(request.POST) # 验证数据的合法性 if user_form.is_valid(): new_user = user_form.save(commit=False) new_user.set_password(user_form.cleaned_data['password']) #保存数据 new_user.save() #redirect跳转 return redirect("blog:blog_title") # return HttpResponse("successfully") else: return HttpResponse("sorry,your can not register") else: # 请求不是 POST,构造一个空表单 user_form = RegistrationFrom() # 渲染模板 # 如果不是 POST 请求,则渲染的是一个空的表单 # 如果用户通过表单提交数据,但是数据验证不合法,则渲染的是一个带有错误信息的表单 return render(request, "account/register.html", {"form": user_form}) ~~~ register.html样板 ~~~ {% extends "base.html" %} {% block title %}帐号注册{% endblock %} {% block content %} <form action="." method="post">{% csrf_token %} <label for="{{ form.username.id_for_label }}">用户名</label> <div>{{ form.username }}</div> <label for="{{ form.email.id_for_label }}">邮箱</label> <div>{{ form.email }}</div> <label for="{{ form.password.id_for_label }}">密码</label> <div>{{ form.password }}</div> <label for="{{ form.password2.id_for_label }}">确认密码</label> <div>{{ form.password2 }}</div> <input type="submit" value="注册"> </form> {% endblock %} ~~~ **增加注册内容【手机号】** 配置models.py ~~~ # _*_ coding:utf-8 * _*_ from __future__ import unicode_literals from django.db import models from django.contrib.auth.models import User#引入自带User #新增用户字段 class UserProfile(models.Model): #OneToOneField通过user字段与User类关联,一对一 user = models.OneToOneField(User, unique=True, verbose_name=u"帐号") birth = models.DateField(blank=True, null=True, verbose_name=u"生日") phone = models.CharField(max_length=11, null=True, verbose_name=u"手机号") class Meta: verbose_name = u"用户信息" verbose_name_plural = verbose_name def __str__(self): return 'user{}'.format(self.user.username) ~~~ 生成数据表 配置views ~~~ ~~~ ~~~ from .models import UserProfile #新增用户表单 #增加手机字段用户注册 class UserProfileForm(forms.ModelForm): class Meta: model = UserProfile fields = ("phone", "birth") ~~~ 配置views ~~~ #注册函数,新增字段 def register(request): if request.method == "POST": user_form = RegistrationFrom(request.POST) #新增字段 userprofile_form = UserProfileForm(request.POST) #新增*userprofile_form.is_valid()验证数据 if user_form.is_valid()*userprofile_form.is_valid(): new_user = user_form.save(commit=False) new_user.set_password(user_form.cleaned_data['password']) new_user.save() #新增字段 new_profile = userprofile_form.save(commit=False) new_profile.user = new_user new_profile.save() return redirect("blog:blog_title") # return HttpResponse("successfully") else: return HttpResponse("sorry,your can not register") else: user_form = RegistrationFrom() return render(request, "account/register.html", {"form": user_form, "profile": UserProfileForm}) ~~~ 配置register.html ~~~ {# #新增字段#} <label for="{{ profile.birth.id_for_label }}">生日</label> <div>{{ profile.birth }}</div> <label for="{{ profile.phone.id_for_label }}">手机</label> <div>{{ profile.phone }}</div> ~~~