本篇内容是利用Python语言,创建一个用户注册模块。
Django入门之用户管理
用户注册
我们平时看到的用户注册页面都是由一个一个的表单构成的,所以编写表单文件account/forms.py,在其中创建一个表单类
from django import forms
from django.contrib.auth.models import User
class RegistrationForm(forms.ModelForm):
password = forms.CharField(label="Password",widget=forms.PasswordInput)
password2 = forms.CharField(label="Confirm Password",widget=forms.PasswordInput)
class Meta:
model = User
fields = ("username","email")#1
def clean_password2(self): #2
cd = self.cleaned_data
if cd['password']!=cd['password2']:
raise forms.ValidationError("Passwords do not match.")
return cd['password2']
这个表单继承的是ModelForm类,与之前的Form类有一些不同,如果要将表单中的数据写入数据表或修改某些记录的值,就继承ModelForm类;如果提交表单之后不需要对数据库进行修改,就继承Form类。
语句1 规定了写入数据库中的内容
语句2 保证了两次密码的一致性。以“clean+属性名称”的名字创建的方法都有检查的功能。
这里的数据模型是django中自己带有的,之后也会创建一些django中没有的属性。
编辑视图函数account/view.py文件,
from .forms import LoginForm,RegistrationForm
def register(request):
if request.method =="POST":
user_form = RegistrationForm(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()
return HttpResponse("successfully")
else:
return HttpResponse("sorry,your can not register.")
else:
user_form = RegistrationForm()
return render(request,"account/register.html",{"form":user_form)
这个视图函数保证了只有当两次密码输入均相同时才写入到数据库,用ModelForm自带的save()方法
接下来将注册页面写好,写在templates/account/register.html中,并配置好url
from django.conf.urls import url
from . import views
...
url(r'^register/$', views.register, name='user_register'),
检查django服务是否运行,打开浏览器,可以运行了。
增加注册内容
本次添加django中内置没有的属性。那就需要自己创建,还记得博客属性的创建过程么,过程非常类似,首先在account/models.py文件中创建新添加的属性
from __future__ import unicode_literals
from django.contrib.auth.models import User
from django.db import models
class UserProfile(models.Model):#1
user = models.OneToOneField(User, unique=True)#2
birth = models.DateField(blank=True, null=True)
phone = models.CharField(max_length=20,null=True)
def __uncode__(self):
return 'user{}'.format(self.user.nsername)
1.定义了数据模型类对应在数据库中的名称account_userprofile
2.定义的user的唯一性
然后进行数据迁移
python manage.py makemigrations account
python manage.py migrate account
再将这些属性在表单类forms.py中创建
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ("phone","birth")
编辑视图函数
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth import authenticate,login
from .forms import LoginForm,RegistrationForm,UserProfileForm
if request.method =="POST":
user_form = RegistrationForm(request.POST)
userprofile_form = UserProfileForm(request.POST)
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 HttpResponse("successfully")
else:
return HttpResponse("sorry,your can not register.")
else:
user_form = RegistrationForm()
userprofile_form = UserProfileForm()
return render(request,"account/register.html",{"form":user_form,"profile":userprofile_form})
在原有的视图函数上修改,增加注册表的属性。并将视图页面重新编写好。就可以重新运行了