您现在的位置是: 网站首页 >Django Django

装饰器应用,之使用装饰器记录博客访问日志

admin2019年1月3日 16:59 Django | Python 843人已围观

# 使用装饰器记录博客访问日志 需要对访问进行记录 ## 获取访问request信息 ```python def get_request_ip(request): if 'HTTP_X_FORWARDED_FOR' in request.META: ip = request.META['HTTP_X_FORWARDED_FOR'] else: ip = request.META['REMOTE_ADDR'] print('当前访问路径:', request.get_raw_uri(), '用户IP:', ip) return ip def get_request_agent(request): agent = request.META.get('HTTP_USER_AGENT', '') print('设备信息:', agent) return agent def get_request_uri(request): # uri = request.build_absolute_uri() # http://ip or domain/blog/1/detail/ uri = '{}{}://{}{}'.format(request.scheme, 's' if request.is_secure() else '', request.get_host(), request.get_full_path()) return uri ``` ## 在视图中创建访问记录 ```python class IndexView(View): show_index = True def get(self, request, **kwargs): # 访问写入日志 if get_request_ip(request) != '127.0.0.1': BlogRequestLog.objects.create(ip=get_request_ip(request), user_agent=get_request_agent(request), absolute_uri=get_request_uri(request)) # ...... ``` 所以在每个视图都需要这样加一串代码 ## 使用装饰器创建访问记录 ### 创建装饰器 ```python # 记录博客访问到日志的装饰器 def record_visit_blog_info(func): def decorator(request, *args, **kwargs): # 访问写入日志 print('博客视图中,装饰器记录博客访问日志') if get_request_ip(request) != '127.0.0.1': ip = get_request_ip(request) user_agent = get_request_agent(request) absolute_uri = get_request_uri(request) # 记录日志 BlogRequestLog.objects.create(ip=ip, user_agent=user_agent, absolute_uri=absolute_uri) return func(request, *args, **kwargs) return decorator ``` ### 装饰视图 装饰基于类的视图 ```python from django.utils.decorators import method_decorator @method_decorator(record_visit_blog_info, name='dispatch') class IndexView(View): show_index = True def get(self, request, **kwargs): # ...... ``` 装饰函数视图 ```python @record_visit_blog_info def my_func(request): # ...... ``` 在不改动旧的代码的情况下对访问进行统计,装饰器是一个简洁高效的办法。代码逻辑很简单。

很赞哦! (0)

文章交流

  • emoji
1人参与,1条评论
吾星喵 2019年1月3日 17:08
装饰器实现访问日志记录

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行2076天
  • 系统信息:Linux
  • 后台程序:Python: 3.8.10
  • 网站框架:Django: 3.2.6
  • 文章统计:256 篇
  • 文章评论:60 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站