后端开发-Django
文章平均质量分 72
django细节总结
chuntian_tester
路漫漫其修远兮,吾将上下而求索。
展开
-
APScheduler任务调度框架
APScheduler的全称是Advanced Python Scheduler,它是一个轻量级的 Python 定时任务调度框架,APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令;同时,它还支持异步执行、后台执行调度任务。原创 2023-03-15 03:30:00 · 1544 阅读 · 0 评论 -
Redis使用
redis默认是前台启动,如果我们想以守护进程的方式运行(后台运行),可以在redis.conf中将daemonizeno,修改成yes即可。正确停止Redis的方式应该是向Redis发送SHUTDOWN命令。5.启动redis客户端,打开终端并输入命令。我们可以通过下面命令查看redis是否正在运行。//方式一使用brew帮助我们启动软件。4.redis-cli连接redis服务。该命令会连接本地的redis服务。3.查看redis服务进程。6.关闭redis服务。redis的配置文件。...原创 2022-08-02 14:18:19 · 192 阅读 · 0 评论 -
DRF--跨域问题解决
跨域是因为浏览器的同源策略导致的,也就是说浏览器会阻止非同源的请求。比如我们用vue写了个前端页面,端口为8081,Django写了个后台,端口为8000,前端往后台提交数据,后台返回数据会被浏览器拦截,因为端口不同。2.2.django-cors-headers是一个app,所以需要我们在settings.py里的app里注册corsheaders,尽量放在前面。任何一个不满足上述要求的情求,都认为是复杂请求,复杂请求会先发出一个预请求,跨域请求分为两种,一种是简单请求,一种是复杂请求。...原创 2022-07-20 14:24:58 · 1034 阅读 · 0 评论 -
HttpRunner--安装使用
当设置了base_url后,在request部分的url无需使用$base_url,在测试时如果检测到有base_url变量,会自动进行拼接.安装完成后会自带hrun,httprunner命令,用于运行测试用例,管理操作等.通过${ENV(变量名)}引用.env文件中定义的全局环境变量。debugtalk.py定义python函数,处理动态参数。testcases处理接口的复杂执行逻辑,如接口依赖的用例。testsuites用于批量执行用例,可以实现数据驱动测试。7.env中的环境变量使用。......原创 2022-07-19 23:32:29 · 2225 阅读 · 0 评论 -
DRF--JWT2-用户认证-自定义控制simpjwt返回内容
2.找到这个类发现返回的data里定义了“refresh"和“access"字段,所以重写该类,然后将settings.py里的使用到的规则指定我们重写的类规则即可。1.查看/rest_framework_simplejwt/settings.py12源码,发现使用的TOKEN_OBTAIN_SERIALIZER控制输出,4.settings.py中指定我们使用的规则即可。需求需要返回的响应中包括id,username,token。...原创 2022-07-18 15:46:24 · 718 阅读 · 0 评论 -
DRF--users用户模块
3.3在全局配置文件中指定使用自定义的UserModel模型类,而不再适用django自带的auth.User模型类。3.3.1若未自定义,会使用django自带的auth.User模型类。当Django自带的User模型类不满足需求时可以自定义User模型。3.3.2配置文件中设置自定义的UserModel。3.2定义User模型中不具备但是自己需要的字段。3.1继承django的user模型。1.创建users子应用。2.注册users子应用。3.定义users模型类。...原创 2022-07-18 10:25:52 · 540 阅读 · 0 评论 -
认证与授权,JWT 认证
session_key会保存在服务端,有可能是保存在mysql,有可能是保存在redis,服务端会把这个session_key发送给浏览器客户端,下次来自客户端的请求就会带上这个session_key,服务端校验这个key是否存在,并且是否过期,以判断是否认证通过.obtain_jwt_token生成获取token。refresh_jwt_token刷新token。verify_jwt_token校验token。6.4.3全局路由表中注册路由obtain_jwt_token。......原创 2022-07-17 18:03:28 · 805 阅读 · 4 评论 -
DRF--地址访问权限设置,logging日志模块配置
全局配置文件settings.py中配置ALLOWED_HOSTS=["*"],允许所有IP访问当前系统。2.1全局配置文件settings.py中配置LOGGING=[]3.3日志输出记录。2.logging日志模块使用。1.允许访问当前系统ip白名单。原创 2022-07-17 15:08:42 · 633 阅读 · 0 评论 -
DRF-- 对drf中的功能模块进行二次开发
分析当前需求中要求调用retrieve()方法返回字定义的字段,list()方法还是返回原序列化器类中控制的字段,说明当前父类的retrieve()方法有一点点不满足需求,大部分是满足需求的,所以直接重写父类的retrieve()方法控制返回的字段.观察父类的retrieve()方法,发现返回的是一个Response(serializer.data)对象,那么我们可以重写时,在返回Response对象前将不需要的字段pop掉,然后返回pop掉多余字段的Response就Ok了.......原创 2022-07-15 02:49:38 · 568 阅读 · 1 评论 -
DRF--api接口文档的生成
2.2配置到全局配置文件settings.py中的INSTALLED_APPS列表中。drf>3.10的,需要在全局配置文件settings.py中添加。2.使用drf-yasg自动生成swagger-api接口文档。2.5前端访问swagger-api文档。1.4前端访问自动生成的api接口文档。#指定用于支持coreapi的Schema。2.4在全局路由表中添加路由条目。1.3全局路由表中配置路由。2.3在全局路由表中添加配置。1.使用coreapi自动生成api接口文档。...原创 2022-07-15 00:28:11 · 797 阅读 · 0 评论 -
类视图---->类视图集 演进继承关系图 总结
1.1.类视图尽量简化1.2.类视图根据实际需求选择需要继承的父类视图1.3.如果DRF中的类视图有提供相应的满足需求功能的逻辑,尽量继承DRF中的类视图,并使用父类提供的功能.1.4.如果DRF中的类视图,大多数逻辑能满足需求,可以重写父类中的实现.1.5.如果DRF中的类视图完全不满足需求,可以直接自定义.https。...原创 2022-07-14 22:28:07 · 238 阅读 · 0 评论 -
DRF--Router路由器对象自动生成路由,自定义action生成路由
1.自定义继承了ModelViewSet视图集的类视图中,默认只有list,create,retrieve,update,delete这几类action方法,我们可以自定义action方法,来获取我们指定返回的数据,而不用改变ModelSerializer序列化器. 1.1 自定义names这个action来获取项目id和项目名 1.2 自定义的names方法,一定要用@action(methods=["GET"], detail=False)装饰器装饰才能原创 2022-07-14 15:15:11 · 1014 阅读 · 0 评论 -
DRF--视图集viewsets,具体通用视图viewsets .ModelViewSet
分析上面类视图,发现两个类视图都没有特别自定义的实例方法,那么能做到将两个类视图合成1个类视图吗?分析: ProjectsView类视图提供get()方法调用list()方法,post()方法调用create()方法; ProjectDetailView类视图提供get()方法调用retrieve()方法,&nbs原创 2022-07-14 01:24:57 · 1003 阅读 · 0 评论 -
DRF--generics.py中的ListCreateAPIView,RetrieveUpdateDestroyAPIView
1.generic.py模块提供了: ListAPIView, CreateAPIView, RetrieveAPIView, UpdateAPIView, DestroyAPIView, ListCreateAPIView, RetrieveUpdateDestroyAPIView,2. 对比继承了Mixin扩展类的类视图,可以得出结论:继承Mixin扩展类之后的类视图中的get,post,p原创 2022-07-13 23:33:13 · 735 阅读 · 0 评论 -
DRF--Mixin拓展类,CreateModelMixin,ListModelMixin,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin
1.mixins.py模块中的Mixin拓展类包括: 1.1.CreateModelMixin---->post 创建对象 1.2.ListModelMixin---->get 列出所有对象 1.3.RetrieveModelMixin---->get 查询详情对象 1.4.UpdateModelMixin---->put 修改 1.5.DestroyModelMixin---->de原创 2022-07-13 22:44:33 · 1892 阅读 · 0 评论 -
DRF--GenericAPIView及其搜索,排序,分页功能,分页功能定制
1.GenericAPIView 1.1 具备View的所有特性 1.2 具备APIView中的认证,授权,限流功能 1.3 支持对于获取列表数据接口的搜索,排序,分页功能 1.4 一旦继承了GenericAPIView,往往需要指定queryset,serializer_class类属性 1.4.1 queryset指定的是:当前类视图的内部的实例方法会使用的查询集对象 1..4.2 ser原创 2022-07-13 01:27:11 · 1425 阅读 · 1 评论 -
DRF--APIView的Request对象,Response对象,parser解析器,render渲染器
1.APIView 1.1 当类视图不继承Django自带的View类,而继承DRF的APIView类(或其子类)时,APIView会为 这个类视图提供提取请求字符串参数的request.query_parms方法和请求体参数的 request.data方法 2.Requset对象 2.1 request.query_parms: 可以获取到前端的查询字符串参数原创 2022-07-12 15:43:32 · 623 阅读 · 0 评论 -
DRF--模型序列化器,字段修改
模型序列化器: 有时候我们根据模型类的字段一个个去定义序列化器类中的字段,可能模型类有百个字段,这样一个个定义就显得非常繁琐,所以我们可以使用drf中自带的模型序列化器,即serializers.ModelSerializer.1.定义模型序列化器 # projects/serializers.py2.指定模型序列化器需要操作的模型类 # projects/models.py3.terminal中执行命令 3.1 python manag原创 2022-07-11 13:55:19 · 1576 阅读 · 0 评论 -
DRF--序列化器类中的to_internal_value,to_representation方法,save,create,update方法
1.to_internal_value方法 def to_internal_value(self, data): 1.1 to_internal_value方法,是所有字段开始校验时的入口方法,最先调用 1.2 会依次对序列化器类的各个字段进行校验,校验顺序:对字段类型校验->validators列表中的校验规则从前往后依次验证->从后往前依次验证min_length,max_value等其他规则->校验器内部单字段校验规则->to_internal原创 2022-07-10 19:04:12 · 1611 阅读 · 0 评论 -
DRF--validators检验函数,单字段校验,多字段联合校验
1.validators校验函数 a).可以在序列化器字段上使用validators函数指定自定义的校验规则 b).validators值必须为序列类型(类表),在列表中可以添加多个校验规则 c).DRF框架自带的UniqueValidator校验器,必须指定queryset参数指定查询集对象,用于对该字段的唯一性进行校验,UniqueValidator里面还可以使用message指定自定义报错信息 在序列化器需要反序列化输入校验的字段中,指定vali原创 2022-07-10 16:49:17 · 2685 阅读 · 0 评论 -
DRF--序列化器对字段错误提示自定义error_messages,对关联字段的定义
1.序列化器中error_messages自定义错误提示 1.1 可以在序列化器的任意字段上使用error_messages={"key1":"value1","key2":"value2"} 参数来指定自定义需要返回的反序列化校验失败的数据错误提示信息 1.2 使用需要被校验的字段名作为key,对应自定义错误提示信息作为value2.序列化器对关联字段的序列化输出定义(通过父表获取从表数据) 2.1 序列化器中可以使用PrimaryK原创 2022-07-10 00:46:38 · 1618 阅读 · 0 评论 -
DRF--反序列化输入时数据校验,required,write_only,read_only使用
1.反序列化输入时数据校验 1.1 序列化器类支持的属性字段类型中的参数 label:文档信息,在接口文档中显示,类似模型类中的verbose_name help_text:文档信息,和模型类中的help_text作用一致 max_value:反序列化校验允许的最大值,一般在serializers.IntergerField()中使用 min_value:反序列化校验允许的最原创 2022-07-08 14:12:17 · 983 阅读 · 0 评论 -
DRF框架--简介,安装,序列化器定义,序列化输出,反序列化输入
RESTful风格: 是一种风格,不是标准,是REpresentational State Transfer缩写,具象状态传输,每一个url代表一种资源,可以说json格式数据,text文本格式数据,图片,视频等媒体数据。 客户端和服务器之间通过请求头中指定Content-Type来指明传递给服务端的参数类型,通过请求头中指定Accept来指明希望接收服务器端 返回的数据类型。 Content-Type通常可以指定以下几种: "a原创 2022-07-08 00:47:50 · 1286 阅读 · 0 评论 -
ORM--数据库增删改查操作逻辑
1.数据获取逻辑 1.1 获取多条数据 1.2 获取单条数据 2.创建数据逻辑 3.修改数据逻辑 3.1 修改前的数据 3.2 修改 3.3 修改后 4.删除数据逻辑 删除表中数据时,从表模型若定义外键on_delete=models.CASCADE属性,则从表中的关联 数据也会被删除。.........原创 2022-07-07 00:10:57 · 653 阅读 · 0 评论 -
ORM--分组查询,聚合查询,查询集QuerySet对象特性
1.分组查询 1.1.使用 QuerySet对象.values(‘父表主键id’).annotate(聚合函数(‘从表模型类名小写') 1.2.会自动连接主从表,以外键字段作为分组条件 2.聚合运算 2.1.使用 QuerySet对象.aggregate(聚合函数('字段名')) 方法,返回字典数据 2.2.返回的字典数据中的key为 字段名__聚合函数名 小写 2.3.可以使用关键参数形式,返回的字典数据中的key为关键字参数名原创 2022-07-06 22:48:31 · 676 阅读 · 0 评论 -
ORM--逻辑关系与&或;排序操作,更新记录操作,删除记录操作
1.逻辑关系 1.1 与 1.1.1 filter()中用逗号分隔多个过滤条件 qs = Projects.objects.filter(id='xx', full_name='xxx') 1.1.2 链式多次调用filter()方法 qs = Projects.objects.filter(full_name='xxx').filter('i原创 2022-07-06 14:10:32 · 464 阅读 · 0 评论 -
ORM--查询类型,关联查询
ORM框架中,会给每一个模型类中的主键设置一个别名:pk models.Projects.objects.filter(id=2)等效于models.Projects.objects.filter(pk=2)1.filter()和exclude()查询类型 exclude()就是filter()的反向查询 1.1 filter()支持的查询类型: models.模型类名.objects.filter(字段名__查询类型=xxxx)原创 2022-07-06 01:40:29 · 647 阅读 · 0 评论 -
ORM模型--数据记录的创建操作,查询操作
1.数据库表记录的创建 1.1 通过模型类名(字段1=值1,字段2=值2.。。).save()新增记录1.2 通过模型类名.objects.create(字段1=值1,字段2=值2.。。。)新增记录2.数据库表记录的查询 2.1 查询多条数据 2.1.1 查询数据库中所有数据 qs = 模型类.objects.all(),获取到的是一个查询集queryet对象原创 2022-07-05 21:58:47 · 407 阅读 · 0 评论 -
ORM模型--关联字段,抽象模型类
1.关联字段 表与表之间的关系分为: 一对一关系:如学生表与学生详细信息表之间的关系,学生表中一个学生在学生信息表 中只有一条对应关系记录 一对多关系:如projects表与interfaces表之间的关系,项目表中的一个项目,在接口表 中可能有多个接口都属于此项目原创 2022-07-05 10:56:18 · 359 阅读 · 0 评论 -
【ORM框架】
配置数据库连接信息- 创建数据库和用户- 配置数据库- 安装mysqlclient在子应用的models.py中定义模型类样例1.定义模型类2.迁移terminal在项目根目录执行命令:生成的数据表名默认为:子应用名_模型类名小写全局配置文件settings.py中配置数据库在我们修改线上数据库的某个字段名或者新增字段,删除字段前,都应对现有数据进行备份,可以冷备,可以热备;......原创 2022-07-05 00:16:07 · 314 阅读 · 0 评论 -
request对象对请求体,请求头参数的解析
1.请求体参数解析: 1.1 GET请求 1.1.1 请求url中/?xxx&xxx格式为查询字符串参数,通过request.GET获取请求参数 1.1.2 请求url中/xxx/2/xxx格式为路径参数,通过request.GET获取 1.1.3 url中xx/?name=aa&age=19&name=bb,通过request.GET获取,若想获取所有name参数,通过getlist('key1')获取原创 2022-07-04 21:51:13 · 2692 阅读 · 0 评论 -
request对象,类视图,HttpResponse对象,JsonResponse对象
1.request对象 不管是函数视图还是类视图,视图中都必须有request对象,request对象包含了前端访问时的所有请求数据,包括method,data,params,path_info,env等。 1.1 从request对象中获取method 若请求是非get方法时,需要将全局配置setting.py中的csrf认证关闭,否则请求失败 2.类视图 通常在项目中,我们很少使用函数视图,会采用类视图,使用类视图好处:类可以被继承,在其他视图中可以继承已有的视原创 2022-07-04 10:32:16 · 275 阅读 · 0 评论 -
创建+注册 子应用_定义路由,全局路由与子路由
目录一.创建注册子应用1.创建子应用 2.创建后注册子应用 3.子应用结构 二.定义路由 1.子应用的views.py中定义视图 2.将子应用定义的视图添加到全局路由配置urls.py文件中 3.前端路由访问 命令行使用: python manage.py startapp 子应用名 注意:区别创建django项目:django-admin startproject 项目名 .原创 2022-07-01 10:51:50 · 526 阅读 · 0 评论 -
git 版本管理
git版本管理使用原创 2022-07-01 09:44:06 · 946 阅读 · 0 评论 -
pipenv创建虚拟环境+创建django程序
初始化原创 2022-06-30 22:09:55 · 379 阅读 · 0 评论 -
Django(三)----利用jinja2返回html页面+MVT模式
1.项目根目录中创建templates目录,存放html页面2.全局配置文件修改TEMPLATES列表中的DIRS值,将存放html文档的templates目录添加进去3.定义html页面4.使用django.shortcuts中的render函数返回html5.前端访问locals()+jinjia2插值表达式 1。类视图中返回模板时,加入locals() 2.前端模板使用插值表达式引用后端数据<......原创 2022-05-26 00:57:10 · 580 阅读 · 1 评论 -
Django(二)----函数视图与类视图
函数视图:from django.http import HttpResponse# Create your views here.def index(request): """ request:是HttpResponse对象,前端的请求信息会全部传递给这个参数request return:必须返回一个HttpResponse对象或者子对象 """ return HttpResponse("<h1>Hello,大佬们!</h1>原创 2022-05-26 00:19:22 · 729 阅读 · 0 评论 -
Django(一)----简介及项目子应用介绍
Django是米国一个新闻公司开源的一个python后端框架,名字好像是源自于比利时的一个音乐家,现在和Flask,Tornado都是python后端流行的框架。Django与前面的Flask对比:Django:大而全,入门简单,开发效率高,python最流行web框架,类似精装房Flask:轻量级,定制化程度更高,适合高手,类似毛坯房Django特点:1.提供创建项目工程的自动化工具2.数据库ORM支持3.模板......原创 2022-05-25 13:45:07 · 650 阅读 · 0 评论