本文实现功能:
除‘主页’和‘注册’页之外的所有页面,都只有在用户登录后才能访问。
实施方法:在city_infos的views.py文件中,引入装饰器,并在所有视图函数前应用装饰器。
步骤如下:
1、使用import引入装饰器
from django.contrib.auth.decorators import login_required #导入函数login_required()
2、在视图函数前使用装饰器
#将login_required函数作为装饰器,在运行cities代码前,先运行login_required中的代码
#login_required检查用户登录情况,已经登录,才运行cities的代码
#如果未登录,就定向到登录界面
@login_required
def cities(request):cities = City.objects.order_by('date_added')context = {'cities':cities}return render(request,'city_infos/cities.html',context)
3、为了实现重定向,修改city_infos的setting.py文件。该文件位于项目根目录:C:\D\Python\Python310\study\snap_gram\snap_gram
在文件的最后添加如下内容:
#我的设置
LOGIN_URL = 'users:login'
4、如果只在cities函数前加装‘装饰器’,未登录用户无法查看城市列表,但是仍旧可以使用url(例如:localhost:8000/new_city/),进行非登录用户不应该执行的操作,如下图所示:
为了防止此类情况,需要在views.py文件除index函数外的,所有函数前加装装饰器。