文章目录
1 注册表单类
- 用户注册和实现登录类似,首先需要填写表单。
编辑./account/forms.py,增加一个注册用户的表单类,并建立User的数据模型。
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")
def clean_password2(self):
cd = self.cleaned_data
if cd["password"] != cd["password2"]:
raise forms.ValidationError("passwords do not match.")
return cd["password2"]
语句①引入了Django默认的用户类型User类。
语句②传递的参数为forms.ModelForm,而登录函数用的传参是forms.Form,两者的区别是:如果要将表单中的数据写入数据库或者修改某些记录的值,就要使用ModelForm;图个提交表单之后,不会对数据库进行修改,则使用Form。
- 编写注册的视图函数。
编辑./account/views/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, You can't register.")
else:
user_form = RegistrationForm()
return render(request, "account/register.html", {
"form": user_form})
- 然后编写模板。
在./templates/account里面创建register.html文件,代码如下:
{% extends "base.html" %}
{% load staticfiles %}
{% block title %}register user{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>Register</h1>
<p>If you are a user, <strong><a href="{% url 'account:user_login' %}">Login</a></strong>,please</p>
<p>or register.</p>