from django.contrib.auth.decorators import login_required
<!--可以指定登录的url-->
@login_required(login_url='/login_logout/')
def profile(request):
return HttpResponse('个人中心!')
项目完整代码如下
(1)views.py文件中示例代码如下:
from django.http import HttpResponse
from djang.shortcuts import render, redirect, reverse
from .models import User
from .forms import login_logout_Form
from django.contrib.auth import authenticate, auth
from django.views import View
<!--1.首先定义一个添加用户信息的视图-->
def addview(request):
<!--1. 添加普通用户-->
user = User.objects.create_user(username='孤烟逐云', telephone='18833331111', password='111111')
user.email = '[email protected]'
user.save()
return HttpResponse('successful!')
<!--2. 添加超级用户-->
user = User.objects.create_superuser(username='云中云', telephone='18833332222', password='111111')
user.email = '[email protected]'
user.save()
return HttpResponse('success!')
<!--表单的形式提交用户数据-->
<!--2. 之后定义一个首页类视图,如果是get请求,返回 一个模板;如果是post请求就采用表单验证提交的数据的合法性,如果合法就添加到数据库中-->
class login_logout(View):
def get(self, request):
return render(request, 'login_logout.html')
def post(self, request):
form = login_logout_Form(request.POST)
if form.is_valid():
telephone = form.clean_data.get('telephone')
password = form.clean_data.get('password')
remember = form.clean_data.get('remember')
user = authenticate(request, username=telephone, password=password)
<!--如果验证成功就会返回一个user对象,验证不成功,就返回None-->
if user and user.is_active:
login(request, user)
if remember:
<!--设置过期时间通过session.set_expiry(),设置为None的话,就会使用全局的-->
request.session.set_expiry(None)
else:
request.session.set_expiry(0)
return HttpResponse('登录成功!')
else:
return HttpResponse('用户名或密码不正确!')
<!--如果表单没有验证成功-->
else:
print(form.errors.get_json_data())
return redirect(reverse('login_logout:login_logout'))
(2)forms.py文件中示例代码如下:
from django import forms
from .models import User
from django.contrib.auth import get_user_model
class login_logout_Form(forms.ModelForm):
remember = forms.IntegerField(required=False)
class Meta:
model = get_user_model()
fields = ['telephone', 'password']
<!--如果你想要验证模型User中定义的所有字段, 就可以指定fields = '__all__'-->
之后就可以输入url进行登录验证了,这时会在pycharm终端打印出错误信息:{'telephone': [{'message': 'User with this Telephone already exists.', 'code': 'unique'}]}。因为在models.py文件中的模型User中定义的telephone字段就是唯一的,即unique=True,而且在forms文件中继承了User所有的字段,所以此时在验证的fields中指定telephone的话,就会验证数据库中的telephone的唯一性。