django - Django:使用条件 login_required 查看
问题描述
给定视图,latest_objs
如果 URL 中有参数,我希望视图有条件地要求登录。
目标:
如果传递的 URL 是,则返回与任何特定用户无关
latest-objs
的非认证视图。objs
如果传递的 URL 是
latest-objs/mine
,如果用户未通过身份验证,我想要求登录,因为该版本的视图应该返回objs
与经过身份验证的用户相关的内容。
问题:
- 这样做是正确的方法来检查
request.GET.get('some-param')?
我将如何在我的
urls.py
文件中定义这两个场景?目前我有这个:url(r'latest-objs', views.latest_objs, name='latest_objs'),
有点题外话:我想知道是否值得为此烦恼,或者只是创建两个不同的视图。
解决方案
request.GET
当您的 URL 有查询字符串时使用,例如/latest-objs?owner=me
.
对于 URL /latest-objs/mine
,您必须修改您的 URL 模式,或添加一个新的。我更喜欢添加一个新的 URL 模式,因为我认为它更具可读性。您可以使用新视图,
url(r'latest-objs/mine', views.my_objs, name='my_objs'),
或使用相同的视图,并传递mine
给视图,以便您可以判断匹配的 URL 模式。
url(r'latest-objs/mine', views.latest_objs, {'mine': True}, name='my_objs'),
如果您采用后一种方法,那么您需要更新视图以接受mine
作为参数。
def latest_objs(request, mine=False):
...
您是否重用相同的视图或不同的视图是一个判断问题,在我看来,这取决于视图。对于一个简单的视图,一个单独的视图将是最直接的,因为您可以使用登录所需的装饰器或 mixins 来处理重定向。对于更复杂的视图,单独的视图可能会导致代码重复。
推荐阅读
- java - 反序列化 Enum,其中包含 Map
- azure - Azure IoT Hub MQTT 设备和设备孪生更改
- vue.js - 文档未在 nuxtjs 中定义关于集成 jqxwidget
- java - 如何在 IntelliJ 中生成带有组件和类的 UML 图?
- docker - 当我们想使用 github 操作执行 ansible 命令时如何管理 ssh 密钥文件
- spring-boot - Spring Boot Elasticsearch 和 @JsonProperty
- if-statement - 在正文中测试正则表达式之前,需要在主题中设置强制性条件
- android - 是否可以在 HFP 配置文件中选择蓝牙音频编解码器?
- swift - 快速的语法。什么是
在“withUnsafeMutableBytes (_..." - pyspark - 是否可以在 2 个以上的流之间共享 foreachBatch 的 batchId?