项目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>
~~~