如何批量的在django中对url进行用户登陆限制
参考URL:
https://blog.csdn.net/hanshengzhao/article/details/79540306?utm_source=blogxgwz0
1,首先定义一个内部有装饰器的函数,解析出每一个url中的path,并将login_required加在其前面。
def required(wrapping_functions, patterns_rslt): if not hasattr(wrapping_functions, '__iter__'): wrapping_functions = (wrapping_functions,) return [ _wrap_instance__resolve(wrapping_functions, instance) for instance in patterns_rslt ] def _wrap_instance__resolve(wrapping_functions, instance): if not hasattr(instance, 'resolve'): return instance resolve = getattr(instance, 'resolve') def _wrap_func_in_returned_resolver_match(*args, **kwargs): rslt = resolve(*args, **kwargs) if not hasattr(rslt, 'func'): return rslt f = getattr(rslt, 'func') for _f in reversed(wrapping_functions): # @decorate the function from inner to outter f = _f(f) setattr(rslt, 'func', f) return rslt setattr(instance, 'resolve', _wrap_func_in_returned_resolver_match) return instance
2,在url.py中,将需要登陆的url放在urlpatterns_base列表中,之后,统一调用required函数进行登陆登陆。而不需要登陆的函数,就可以放在最后的urlpatterns延长列表之中。用户登陆的url千万不要放在base里。
""" 在urlpatterns_base统一定义需要用户登陆的url,且放置于required前面 不需要登陆的url,统一放在urlpatterns,位于required后面。 accounts用户登陆模块本身不需要登陆,不然会陷入循环要求登陆。 """ urlpatterns_base = [ path('', IndexView.as_view(), name='index'), path('admin/', admin.site.urls), ] urlpatterns_base += [ path('public/', include('public.urls')), ] urlpatterns_base += [ path('order/', include('order.urls')), # 取决于 order.urls里有没有app_name变量,以及实例命名和应用命名空间,写法多变 # 不管如何改变写法,app_namespace是必须的,而namespace是可选的 # path('order/', include(('order.urls', 'order'))), # 只定义app_name,两个括号不可少 # path('order/', include('order.urls')), # 这种情况下,下一层已定义好app_name # path('order/', include('order.urls'), namespace='order'), # 这种情况下,下一层已定义好app_name # path('order/', include(('order.urls', 'order'), namespace='order')), # 全写在第一层 ] # 为哪些url加上登陆要求 urlpatterns = required( login_required, urlpatterns_base ) urlpatterns += [ path('accounts/', include('accounts.urls')), ]
如何批量的在django中对url进行用户登陆限制的更多相关文章
- Django中间件 及 form 实现用户登陆
Django中间件 及 form 实现用户登陆 Form 验证 密码调用md5 加密存储 form.add_error("字段名", "错误信息") 自定义错误 ...
- 利用Django中的url方法实现地址动态拼接自动生成超链接地址
目标 建立一个图书列表页面,显示图书名列表,并实现点击书名跳转到图书详细页面,显示图书详细信息. URL方法简介 功能:返回一个绝对路径的引用(不包含域名的URL):该引用匹配一个给定的视图函数和 一 ...
- [UnicodeEncodeError]:Django中解决URL中文解释乱码问题
Django中在使用HttpResponseRedirect的时候,跳转URL中如果存在中文,会报错:会报UnicodeEncodeError错误. 解决办法: 使用urlquote对URL进行编码 ...
- django中的url控制
1.django中的第一个控件:url控制 (路由分发) urls.py:请求路径与视图函数的之间的关系 步骤: 1.首先是要配置环境, 2.其次就是引路径 3.在视图的文件夹里面写相应的函 ...
- django 使用装饰器验证用户登陆
使用装饰器验证用户登陆,需要使用@method_decorator 首先需引用,method_decorator,并定义一个闭包 from django.utils.decorators import ...
- 给Django中的url起名字
url反转 =>reverse 1.from django.shortcuts import reverse 2. 利用reverse函数对URL名称进行反转 reverse(url名称 ...
- Django中的URL映射
1.为什么回去urls.py文件中寻找映射呢? 因为在settings.py中配置了ROOT_URLCONF为urls.py: ROOT_URLCONF = 'first_project.urls' ...
- Django中,ajax检测注册用户信息是否可用?
ajax检测注册用户信息主体思路 1.在settings.py中配置需要使用的信息 #对static文件进行配置 STATICFILES_DIRS=[ os.path.join(BASE_DIR,'s ...
- DJANGO中如何用邮箱来登陆?
就是另一个不同的登陆backend. 而DJANGO会尝不同的方式,哪个成功就用哪个 authentication.py from django.contrib.auth.models import ...
随机推荐
- JS获取客户端IP地址、MAC和主机名【转】
JS获取客户端IP地址.MAC和主机名 引用:JS获取客户端IP地址.MAC和主机名的7个方法汇总 利用搜狐接口 <html> <head> <meta http-equ ...
- WinForm ListView虚拟模式加载数据 提高加载速度
将VirtualMode 属性设置为 true 会将 ListView 置于虚拟模式.控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualIt ...
- Study 6 —— 字体和段落属性
字体风格{font-style:normal | italic | oblique | inherit字体复合属性{font:font-style font-variant font-weight f ...
- Git fetch & pull
转:https://blog.csdn.net/qq_36113598/article/details/78906882 1.简单概括 先用一张图来理一下git fetch和git pull的概念: ...
- Linux 命令详解(六)Linux 守护进程的启动方法
Linux 守护进程的启动方法 http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html
- Hibernate_day01
一.今天内容介绍 1 web内容回顾 (1)javaee三层结构 (2)mvc思想 2 hibernate概述 3 hibernate入门案例 4 hibernate配置文件 5 hibernate的 ...
- MyBatis全局配置文件MyBatis-config.xml代码
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- js 分页问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS实现随机背景图片与图片大小变换的效果
经常在网上见一些网站访问一次背景图片改变一次,而且图片的大小不停变换,于是想着自己研究一下. 背景图片可以通过JS的随机数来改变图片的src来实现随机图片,图片的大小变换可以用JS的setInterv ...
- Linux MMC framework2:基本组件之host
声明:本文很多内容和思路参考了http://www.wowotech.net/comm/mmc_host_driver.html,对原作者表示感谢! 1.前言 本文是Linux MMC framewo ...