django未登陆用户的请求进行拦截(非中间件的形式)
2017-11-14 16:16
465 查看
1. 拦截用户的请求的示列(1):
示列代码:def required(wrapping_functions,patterns_rslt): ''' Used to require 1..n decorators in any view returned by a url tree Usage: urlpatterns = required(func,patterns(...)) urlpatterns = required((func,func,func),patterns(...)) Note: Use functools.partial to pass keyword params to the required decorators. If you need to pass args you will have to write a wrapper function. Example: from functools import partial urlpatterns = required( partial(login_required,login_url='/accounts/login/'), patterns(...) ) ''' 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) 4000 setattr(rslt,'func',f) return rslt setattr(instance,'resolve',_wrap_func_in_returned_resolver_match) return instance
其中的login_required可以换成其他的修饰器。
使用:
urlpatterns += required( partial(login_required,login_url='/accounts/login/'), urlpatterns )
参考地址:https://www.91r.net/ask/9318962.html
2.拦截用户请求的示列(2):
示列代码:from django.core.urlresolvers import RegexURLPattern, RegexURLResolver from django.conf.urls.defaults import patterns, url, include from django.contrib import admin from myproject.myapp.decorators import superuser_required class DecoratedURLPattern(RegexURLPattern): def resolve(self, *args, **kwargs): result = super(DecoratedURLPattern, self).resolve(*args, **kwargs) if result: result.func = self._decorate_with(result.func) return result class DecoratedRegexURLResolver(RegexURLResolver): def resolve(self, *args, **kwargs): result = super(DecoratedRegexURLResolver, self).resolve(*args, **kwargs) if result: result.func = self._decorate_with(result.func) return result def decorated_includes(func, includes, *args, **kwargs): urlconf_module, app_name, namespace = includes for item in urlconf_module: if isinstance(item, RegexURLPattern): item.__class__ = DecoratedURLPattern item._decorate_with = func elif isinstance(item, RegexURLResolver): item.__class__ = DecoratedRegexURLResolver item._decorate_with = func return urlconf_module, app_name, namespace
使用:
urlpatterns = patterns('', # ... (r'^private/', decorated_includes(login_required, include(private.urls))), )
相关文章推荐
- Django 用户登陆功能
- django页面请求sql分析中间件
- Django 1.11 前端数据异步加载(前端页面单独请求用户登录状态)
- Django网站建设-用户注册、登陆、邮箱激活、密码找回
- 用HttpPost登陆验证时,用户名和密码放在请求头部header中的处理方法,形式为Authorization: username password。
- Django 类方式view进行进行用户验证
- struts2_全局的拦截器,拦截用户非法登陆
- 从django的中间件直接返回请求
- 实现对未登录用户进行相关操作的拦截
- php curl 模拟用户登陆https请求SSL实例代码
- 假定某系统提供硬件的访管指令(例如形式:“svc n”),为了实现系统调用,系统设计者应做哪些工作?用户又如如何请求操作系统服务?
- 采用JSP+JavaBean的方式进行简单的实现用户的网页登陆实例
- filter对request请求拦截,对请求参数进行修改
- 防用户不登陆操作直接请求jsp页面
- 用struts2拦截器的实现(拦截未登陆用户)
- Django中使用session保持用户登陆连接
- 利用Django中间件middleware解决用户未登录问题(转)
- 用有DBA权限的用户或本地conn / as sysdba 登陆进行解锁
- django 用户登陆注册
- win7 局域网文件共享的两个问题——没有权限访问和未授予用户请求登陆类型