使用Django工程自动创建的auth_user表来存储用户信息
在app目录下创建forms.py
mysite/music/forms.py from django.contrib.auth.models import User from django import forms class UserForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput) class Meta:
model = User
fields = ['username', 'email', 'password']
mystie/muisc/views.py from django.contrib.auth import authenticate, login
from django.views.generic import View
from .forms import UserForm class UserFormView(View):
form_class = UserForm
template_name = 'music/registration_form.html' # display blank form
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form}) # process form data
def post(self, request):
form = self.form_class(request.POST) if form.is_valid(): user = form.save(commit=False) #先不提交 # cleaned (normalized) data
username = form.cleaned_data['username'] #防止注入
password = form.cleaned_data['password']
user.set_password(password) #加密
user.save() # return User objects if credential are correct
user = authenticate(username=username, password=password) #注册 if user is not None: if user.is_active:
login(request, user)
return redirect('music:index') return render(request, self.template_name, {'form': form})
mysite/music/urls.py ...
# /muisc/register/
url(r'^register/$', views.UserFormView.as_view(), name='register'),
...
music/registration_form.html
<form action="#" method="post" class="form-horizontal">
{% csrf_token %}
{% include 'music/form-template.html' %}
</form>
music/form-template.html
{% for field in form %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<span class="text-danger small">{{ field.errors }}</span>
</div>
<label class="label-control col-sm-2">{{ field.label_tag }}</label>
<div class="col-sm-10">{{ field }}</div>
</div>
{% endfor %} <div class="form-group">
<div class="col-sm-offset-2">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>