针对上一篇比较简单的注册内容,只要求用户输入用户名和密码,根据现在的网站需求,我们常常需要用户填写手机号或收货地址之类的信息。这里以注册页面加入手机号为例,有些代码如果觉得不好理解可以先看一下上一篇文章。这篇文章的代码都是在上一篇基础上完善的
1 models.py中创建新的类
from django.contrib.auth.models import User
from django.db import models
class UserProfile(models.Model):
user = models.OneToOneField(User,unique=True,on_delete=models.CASCADE)
phone = models.CharField(max_length=20,null=True)
address = models.CharField(max_length=100,null=True)
def __str__(self):
return self.phone
class Meta:
verbose_name_plural=verbose_name='用户信息'
2 admin.py中注册
from django.contrib import admin
from .models import UserProfile
@admin.register(UserProfile)
class UserProfileAdmin(admin.ModelAdmin):
list_display = ('user','phone',)
fields = ('user','phone',)
3 创建表单类
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('phone',)
4 完成视图类
def register(request):
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('注册成功')
else:
return HttpResponse('注册失败')
else:
user_form = RegistrationForm()
userprofile_form = UserProfileForm()
return render(request,'account/register.html',{'form':user_form,'profile':userprofile_form})
5 完善模板
<div class="row text-center">
<h1>注册</h1>
<form class="form-horizontal" action="{% url 'user_register' %}" method="post">
{% csrf_token %}
<div class="form-group">
<label for="{{ form.username.id_for_label }}" class="col-md-5 control-label">用户名:</label>
<div class="col-md-6 text-left">{{ form.username }}</div>
</div>
<div class="form-group">
<label for="{{ form.email.id_for_label }}" class="col-md-5 control-label">Email:</label>
<div class="col-md-6 text-left">{{ form.email }}</div>
</div>
<div class="form-group">
<label for="{{ form.password.id_for_label }}" class="col-md-5 control-label">密码:</label>
<div class="col-md-6 text-left">{{ form.password }}</div>
</div>
<div class="form-group">
<label for="{{ form.password2.id_for_label }}" class="col-md-5 control-label">密码:</label>
<div class="col-md-6 text-left">{{ form.password2 }}</div>
</div>
<div class="form-group">
<label for="{{ profile.phone.id_for_label }}" class="col-md-5 control-label">手机:</label>
<div class="col-md-6 text-left">{{ profile.phone }}</div>
</div>
<input type="submit" class="btn btn-primary btn-sm" value="提交">
</form>
</div>
完成以上步骤就可以增加手机字段的注册了,还需要增加其他字段的注册要求只要多编写其他字段就可以了。