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