Django高级开发
一、自定义过滤器
针对个人中心页面,展示用户的手机号中间部分隐藏,可以有两种思路
1、视图中修改,在视图中将用户手机号中的部分内容修改为 *
2、视图返回原有的数据,使用自定义过滤器的方法,将手机号中的部分内容隐藏
-
自定义过滤器定义
1、在App中新建一个包 templatetags,名字固定
2、在包中新建一个py文件,名字任意,例如:mytag.py
3、创建过滤器,写函数代码(一个参数或者两个参数),并注册
from django.template import Library register = Library() @register.filter def filter_phone(phone): return phone[:3] + "*" * 4 + phone[8:] if __name__ == '__main__': print(filter_phone("1223345464")) # 注册过滤器 "buyer.templatetags"
-
自定义过滤器使用
1、在模板中加载过滤器
在个人中心页面中的首行加载过滤器
{% load mytag %}
2、使用过滤器
在个人中心页面中使用自定义过滤器
联系方式: { { user.phone | filter_phone }}
二、自定义实体类管理器manager
通常我们通过模型的objects方法调用查询的方法,实质上,objects是Django模型动态生成的一 个 查询类,这个查询类继承了models.Manager
-
自定义objects
from django.db.models import Manager
-
定义类
from django.db.models import Manager class SellerManager(Manager): def getname(self, id): return Seller.objects.get(pk=id).name
-
将定义的类复制到objects
objects =SellerManager()
1个实体类只有能有1个名字是objects的管理器,如果定义其他管理器了,objects就没有
通常在工作当中,自定义ORM查询的可能性不大,由于MySQL的灵活性和复杂性,导致大部分项 目愿意使用原生的SQL查询。但是对数据进行增删改都可以自定义ORM
三、中间件
-
中间件介绍
中间件是处理Django请求和响应的框架级别的钩子,它是一个轻量、低级别的插件系统,用于全局范围内改变Django的输入和输出,每一个中间件都有固定的功能,使用需要很谨慎。中间件尽可能的解决了项目代码冗余和代码一致性问题
django中间件是django提供给用户可以影响全局请求和响应的接口
process_request 请求开始,视图之前
process_views 请求开始,视图之中
process_exception 错误
process_template_response 视图结束,模板开始渲染
process_response 响应结束
中间件执行的顺序和平常代码执行的顺序有差距,开发者通过类来定义中间件,中间件类当中可以包含上述的5个方法
- 中间件使用
1、创建文件
在项目的主目录下编写middleware文件,用来编写中间件
2、中间件的方法
"""中间件"""
from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponse
class MyMiddleware(MiddlewareMixin)