def login_required(info): def wrapper(request, *args, **kwargs): user_id = request.session.get('user_id') if not user_id: print('用户session过期, 需重新登陆') return redirect('/login') return info(request, *args, **kwargs) return wrapper
时间: 2023-12-06 08:40:40 浏览: 33
这是一个装饰器函数,用于对视图函数进行装饰,以实现登录验证功能。传入的参数info是被装饰的视图函数,wrapper函数是装饰器函数的实现体,它首先获取当前用户的session中保存的user_id,如果没有获取到,则认为用户未登录,重定向到登录页面。如果获取到了user_id,则调用被装饰的视图函数,并将request以及其他参数传递进去。最后返回视图函数的执行结果。这样,当用户访问需要登录才能访问的页面时,就会先经过这个装饰器函数的验证。如果用户未登录,则会被重定向到登录页面。如果已经登录,则可以正常访问页面。
相关问题
def permission_required(permission): def decorator(view_func): @login_required def wrapper(*args, **kwargs): if permission in current_user.permissions: return view_func(*args, **kwargs) else: return abort(403) return wrapper return decorator 如何返回的端点是原来的端点?请帮我修改这段代码
在这段代码中,装饰器 `wrapper` 会替换原有的视图函数。如果你想让装饰器返回原来的端点,可以使用 Flask 提供的 `wraps` 装饰器来保留原有的函数信息,例如:
```python
from functools import wraps
from flask import abort
def permission_required(permission):
def decorator(view_func):
@wraps(view_func)
@login_required
def wrapper(*args, **kwargs):
if permission in current_user.permissions:
return view_func(*args, **kwargs)
else:
return abort(403)
return wrapper
return decorator
```
在这个修改后的代码中,我们在装饰器 `wrapper` 上使用了 `@wraps(view_func)`,这样就会保留原有的函数信息。
def authorize(power: str, log: bool = False): def decorator(func): @login_required def wrapper(request, *args, **kwargs): if not power in request.session.get('permissions'): if log: exec_log(request=request, is_access=False, desc='没有权限') if request.method == 'GET': return res_josn_data.fail_api(msg="权限不足!") if log and request.method == "POST": exec_log(request=request, is_access=True, desc=str(dict(request.POST))) return func(request, *args, **kwargs) return wrapper return decorator
这是一个装饰器函数,用于检查用户权限的装饰器。它接受一个权限字符串和一个布尔型参数 log,如果 log 为 True,则会记录用户权限检查的结果。它返回一个装饰器函数 decorator,decorator 接受一个函数 func 作为参数,并返回一个新的函数 wrapper,wrapper 实现了对用户权限的检查和记录,并调用原始的函数 func。
具体来说,当一个请求到达被装饰的函数时,wrapper 首先使用@login_required 装饰器检查用户是否已经登录,如果没有登录则返回登录页面。接着,wrapper 检查用户是否有指定的权限,如果没有则返回一个错误信息。如果 log 开启,则会记录检查结果,以及 POST 请求的数据(如果请求是 POST 请求)。最后,wrapper 调用原始的函数并返回其结果。
这个装饰器函数可以用于 Django 框架中的视图函数或者其他需要权限控制的函数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)