Python 从0开始 一步步基于Django创建项目(12)使用装饰器login_required()限制对页面的访问

本文实现功能:

除'主页'和'注册'页之外的所有页面,都只有在用户登录后才能访问。

实施方法:在city_infos的views.py文件中,引入装饰器,并在所有视图函数前应用装饰器。

步骤如下:

1、使用import引入装饰器

python 复制代码
from django.contrib.auth.decorators import login_required #导入函数login_required()

2、在视图函数前使用装饰器

python 复制代码
#将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

在文件的最后添加如下内容:

python 复制代码
#我的设置
LOGIN_URL = 'users:login'

4、如果只在cities函数前加装'装饰器',未登录用户无法查看城市列表,但是仍旧可以使用url(例如:localhost:8000/new_city/),进行非登录用户不应该执行的操作,如下图所示:

为了防止此类情况,需要在views.py文件除index函数外的,所有函数前加装装饰器。

相关推荐
夏季疯1 小时前
读论文:STARS 是什么结构?一个统一的歌声自动标注框架
python
遨游DATA1 小时前
Spring Boot 启动失败排查:如何区分多 Bean 冲突与清理阶段异常
java·spring boot·后端
IT_陈寒1 小时前
Java线程池这个坑我算是踩明白了
前端·人工智能·后端
掉头发的王富贵1 小时前
我来入职新公司两个月了,为什么只写了100行代码?
后端·ai编程
从零开始的代码生活_2 小时前
C++ 内存管理:从内存分区到 new/delete 底层原理
开发语言·c++·后端
31535669132 小时前
Superpowers:GPT-5.6 时代下的流程毒瘤
前端·后端
光测实验室2 小时前
3种Python降噪算法实测:我把处理速度提升了20倍
python
AOwhisky2 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
花花无缺3 小时前
Windows 定时执行 Python 脚本方案
python·操作系统·命令行
神奇小汤圆4 小时前
2026 Java岗面试题库(已收录GitHub),覆盖所有考点
后端