1 django.contrib.auth
(login logout authenticate)
2 django.contrib.auth.hashers
(make_password) django的加密方式
3 使用redirect进行跳转
4 模板中如何判断用户是否已经登录
例子
表单模型
class LoginForm(forms.Form):
username = forms.CharField(
widget=forms.TextInput(
attrs={'id':"username",
'class': "txt_input txt_input2",
'required': 'required',}),
max_length=50,
error_messages={'required':'username不能为空'})
password = forms.CharField(
widget=forms.PasswordInput(
attrs={'class':'txt_input',
'required':'required'}),
max_length=20,
error_messages={'required':'password不能为空'})
class RegForm(forms.Form):
username = forms.CharField(
widget=forms.TextInput(
attrs={'id':"username",
'class': "txt_input txt_input2",
'required': 'required',}),
max_length=50,
error_messages={'required':'username不能为空'})
password = forms.CharField(
widget=forms.PasswordInput(
attrs={'class':'txt_input',
'required':'required'}),
max_length=20,
error_messages={'required':'password不能为空'})
email = forms.EmailField(
widget=forms.EmailInput(
attrs={'required':'required',
'class':'txt_input'}),
max_length=50,
error_messages={'required': 'email不能为空'})
url = forms.URLField(
widget=forms.URLInput(
attrs={'class': 'txt_input'}),
max_length=100,
required=False)
视图函数
需要导入标准库的登陆 注销 认证模块
from django.contrib.auth.hashers import make_password
from django.contrib.auth import login, logout, authenticate
def do_login(request):
try:
if request.method == 'POST':
login_form = LoginForm(request.POST)
if login_form.is_valid():
# 登录
username = login_form.cleaned_data['username']
password = login_form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user is not None:
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
else:
return render(request, 'failure.html', {'msg': '登陆失败'})
return redirect(request.POST.get('source_url'))
else:
return render(request, 'failure.html', {'msg': login_form.errors})
else:
login_form = LoginForm()
else Exception as e:
print('login in err')
print(e)
return render(request, 'login.html', locals())
def do_logout(request):
try:
logout(request)
except Exception as e:
print(e)
return redirect(request.META['HTTP_REFERER'])
def register(request):
try:
if request.method == 'POST':
reg_form = RegForm(request.POST)
if reg_form.is_valid():
# 注册
user = User.objects.create(
username = reg_form.cleaned_data['username'],
email = reg_form.cleaned_data['username'],
url=reg_form.cleaned_data['url'],
password= make_password(reg_form.cleaned_data['password']))
user.save()
# 登录
# 指定默认的登录验证方式
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
return redirect(request.POST.get('source_url'))
else:
return render(request, 'failure.html', {'msg':reg_form.errors})
else:
reg_form = RegForm()
except Exception as e:
print(e)
return render(request, 'register.html', locals())
url
url(r'^login/$', do_login, name='login'),
url(r'^register/$', register, name='register'),
url(r'^logout/$', do_logout, name='logout'),
模板表单中要加上
<input type="hidden" name="source_url" value="{{ request.META.HTTP_REFERER }}">