自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 收藏
  • 关注

原创 django 深入分析 Manager 和 QuerySet 的区别

这个要熟悉管理器的查询逻辑,上述源码看到管理器是具有 QuerySet 的方法的,那么如果想修改初始的 QuerySet 方法或者想添加额外的 Manager 方法和一些具有辨识度的方法,比如 AbstractUser 的默认管理器中就有 create_user 这样的方法。

2023-04-02 23:02:38 342 1

原创 深入分析 AbstractBaseUser 和 AbstractUser 的区别

AbstractBaseUser中只含有3个字段: password, last_login和is_active,方法也仅包含以下一些身份验证功能和密码存储功能。注意一:用户唯一身份的字段但是需要注意的是你的拓展模型必须有一个可用于识别目的的唯一字段。这可以是一个用户名,一个电子邮件地址,或任何其他独特的属性。如果你使用可以支持的自定义认证后端,则允许使用非唯一的用户名字段。下列 identifier 将被用作识别字段。识别字段:能代表用户唯一身份的字段,比如是 username、email 等注意

2023-03-30 23:04:34 391

原创 Django 之前端获取 csrftoken 的几种方式以及源码解释(超详细)

如果是前后端不分离的项目,django 为了防止 XSS 攻击,要求所有 form 表单提交时加上 标签,前端会再 html 中加入一个 input 标签 这个中间件就是来验证 csrf_token 如果没有加,就会出错,这个 token 每次刷新页面时都会刷新,客户在请求时。会再服务器端生成一个 token,然后放在 cookie里面,每次 post 请求都会带上这个 token,去和表单里面的去对比。官⽅⽂档中说到,检验token时,只⽐较secret是否和cookie中的secret值⼀样,⽽不是

2022-06-10 13:36:04 4215

原创 Django 认证流程源码分析以及自定义 Backend(超详细)

django 有自己的认证方法,不过是基于用户名密码(根据自然键 的方式,实现简单的认证方式,如下:authenticate 源码循环每一个 backend,执行里面的 authenticate 方法,该方法一定要实现。默认的认证方式:没有定义 AUTHENTICATION_BACKENDS ,那么去哪里找它用了那个 backend 呢,可以去全局去找,里面肯定有默认的 backend。...

2022-06-07 20:34:14 909 1

原创 Django REST Framework 之视图梳理APIView、GenericViewSet、ModelViewSet(超详细)

APIViewDRF 为了更符合 restful api 规范,在 View 上层做了一层封装,就是 APIView,View 本身没有权限和认证以及限流等的操作,只做请求的分发,然后返回,里面就是一些简单的分发逻辑,但APIView不同,重写了 as_view方法,里面做了认证、限流、权限、渲染很多东西。这种视图还不够通用,需要自己写一些分页、序列化、queryset 之类的东西。class APIView(View): # The following policies may be se

2022-05-31 13:26:26 1576 1

原创 Django 的 settings 文件为什么不能小写?部分源码分析

背景我们只知道在配置文件中定义的常量要大写,但没测试过为什么要大写,如果小写的话会有效果吗?会报错吗?接下来一探究竟。测试settings.pya = 1 # 小写view.pyclass Resource(APIView): def get(self, request, *args, **kwargs): print(settings.a) return Response(ser.data)发现报错了Internal Server Error:

2022-05-25 12:24:10 180

原创 Django REST Framework 之限流、版本、解析器源码解析(超详细)

限流可以对接口访问的频次进行限制,以减轻服务器压力。自定义限流思路:实现机制:自定义一个字典,key 为唯一标识,可以是 ip 地址、用户名、用户id 等,value 为一个列表,存储时间,如限制十秒内访问三次:{"ip": [16:20:20,16:20:30,16:20:40]}思路: 如果用户没访问过就创建改用户的访问记录并记录时间 如果用户已经访问过,获取用户访问历史,并且判断最后一次访问时间是否小于当前时间减去10秒 如果小于说明是满足间隔时间,那么就把最后一条数据删除 限制判断

2022-05-10 19:06:22 772

原创 Django REST Framework 之认证、权限(超详细)

Django 中认证和权限在没有使用 drf 之前,如何判断用户是否登录,一般是给前端提供一个获取用户信息的接口,如果未登录返回未授权等信息,权限的话一般是在 model 层通过字段来设置,这样只能完成简单的权限限制。

2022-05-07 17:43:06 3550 6

原创 Django REST Framework 之基于游标、偏移量的分页

分页方式普通分页:看第几页,每页显示多少条数据基于偏移量分页,在某个位置,向后查看多少条数据(offset limit)游标分页,加密分页,只能看上一页和下一页,记录当前id的最大值和最小值

2022-05-06 18:04:33 1087

原创 Django REST Framework 使用 FilterSet 自定义筛选字段

django-filter 作用提供了一种简单的方法来根据用户提供的参数过滤查询集。安装$ pip install django-filterINSTALLED_APPS = [ ... 'django_filters',]自定义过滤字段from django_filters.rest_framework import filtersfrom django_filters.rest_framework import FilterSetlabel = filters.C

2022-05-05 16:34:04 1663

原创 git 如何合并 commit ?(必看篇)

项目协作在项目开发时,每天会提交大量的代码,也会有很多 commit 记录,那么要不要处理这些 commit 记录。当然不处理这些 commit 记录也能进行代码合并,就是记录有点多,并且每个 commit 可能获知的信息不那么全,如果合并一下这些 commit 并添加一些这些 commit 的总的概览,这样看起来 commit 记录也少了很多,并且都是有用的提交记录。合并 commitgit log: 查看提交历史上述有五个 commit 记录。如果我想合并四个 commit 记录:git

2022-04-19 16:58:36 26600 3

原创 PowerDesigner 连接 MySQL 数据库关注步骤与注意点

连接 Mysql 数据库新建 PDM(物理数据模型),也就是存在主外键关系的 model,与之相反的是逻辑数据模型(存在主外键关系), PDM 以图形化的方式展示和设计数据库, 创建 PDM 有几种方式,使用设计环境直接创建PDM也可以连接数据库进行逆向生成,本文主要讲解如何使用已经创建好的数据库生成 PMD。选择驱动程序时要注意,位数需要和 powerdesigner 位数一致,不然无法找到。驱动程序下载地址:https://dev.mysql.com/downloads/connec

2022-04-05 13:31:18 6061 3

原创 Django 中 null 和 blank 的区别

null如果为真 null=true ,Django 将在数据库中将空值存储为 NULL。避免 null 在基于字符串的字段上使用,例如 CharField 和 TextField。如果基于字符串的字段具有 null=True,则意味着它有两个可能的“无数据”值:NULL和空字符串。在大多数情况下,“无数据”有两个可能的值是多余的;Django 约定是使用空字符串,而不是 NULL. 一个例外是当 CharField 同时具有 unique=True 和 blank=True设置时。在这种情况下,nul

2022-03-29 11:37:05 2217

原创 python 类型提示和静态类型检查

官方文档:https://docs.python.org/3/library/typing.html#module-typingYouTube:https://www.youtube.com/watch?v=omORtPiMBN4&t=300s&ab_channel=DougMercer为什么关心类型检查?提高代码的清晰度知道变量是什么对象以及它有哪些方法错误更少,因为可以执行静态分析,允许在运行代码之前捕获类型错误所以类型提示如何提高代码清晰度?def impute(x,

2022-03-04 14:38:11 442 1

原创 如何讲好一堂课?

背景不管是在公司中还是学校中,都会遇到知识的分享或者是自己的一些总结陈述,有的讲的磕磕绊绊,有的就是念一些 PPT 稿子,如何有条例的自然的表达出来这就很重要,这个比较考验个人的表达能力和专业知识,表达能力和专业知识这个可以通过后期的努力去提高,但是内容怎么展开节奏去讲,怎么让别人融入到你的课堂氛围中,下面是我个人总结和参考一些网上资料进行的整理。讲课流程敬业精神抱着把内容讲好的信念,决定去给别人传授知识点就要做充分的准备,进行教学的准备和大纲设计。框架、原理说清楚说是干什么用的和其他框架

2021-11-26 11:21:19 335

原创 Django之 Timezone 详解

Django 时区问题:最近在做项目时发现存储的时间比本地时间慢了八小时,查了很多文章,感觉都没有讲的很明白,本文根据自己的理解和如何解决的详细的记录下来,但也参考了一些文章和官网介绍。datetime.now()datetime.now() 永远获取的是你本地的时间,和你配置无任何关系,并且是不带时区属性的。from datetime import datetime>>> datetime.now()datetime.datetime(2021, 11, 11, 15, 20

2021-11-11 17:12:51 5957 1

原创 Django 之 CharField 和 TextField

CharFieldtest_char = models.CharField(max_length=288)设置长度为 288 并不会报错,这取决于你的数据库后端,mysql char 类型长度为 255,django 里面设置超过 255 并不会有提示,个人感觉有点误导人,起码给个警告也行,但是在插入数据时,字节数大于 255 会提示:django.db.utils.DataError: (1406, "Data too long for column 'test_char' at row 1"),注

2021-10-12 22:10:31 12990 1

原创 Django 字段选项之 related_name 和 related_query_name

from django.db import models# Create your models here.class Author(models.Model): name = models.CharField(verbose_name='姓名', max_length=50) age = models.IntegerField(verbose_name='年龄')class Book(models.Model): name = models.CharField(verb

2021-08-29 19:56:34 1640

原创 Django管理器

objectbook =Book.objects.get()在经常写 orm 的时候总是会用到 objects,那 objects 是一个什么东西呢?objects 为我们提供了一系列的对数据库操作的查询方法,objects 是 django 中的管理器对象,管理器中提供了很多对数据库查询的方法,像平常我们经常用的 get、filter、all 等。objects 是 model.Manager 类的对象,它赋予了 django 模型操作数据库的能力, Django 每个模型都至少有一个 Mana

2021-08-24 23:11:47 304

原创 一位高级工程师醉酒后的独白

优秀经理的品质与优秀工程师的许多品质相同。好的代码是初级工程师可以理解的代码。伟大的代码可以被第一年的 CS 新生理解。最好的代码是根本没有代码。如果我发现自己认为自己是房间里最聪明的人,那么就该离开了。我们应该雇佣更多的实习生,他们很棒。那些精力充沛的小家伙用他们的想法乱搞。如果他们可以质疑或批评某事,那就更好了。我喜欢实习生。不要遇见你的英雄。我花了 5000 美元参加了我的一位英雄的课程。他是一个才华横溢的人,但最后我意识到他和我们其他人一样在做事时正在编造。技术栈很重要。好的,我只是说技.

2021-08-24 11:14:04 136

原创 Django 之提升查询性能(二)

Case/When条件表达式让你可以在过滤器、注解、聚合和更新中使用 if … elif … else 逻辑。条件表达式对表的每条记录执行一系列条件,并返回匹配的结果表达式。假设有如下需求”年龄小于18的为未成年(1),年龄在30之间的为青年(2),年龄在60的为中年(3),其他为老年(0)“,那么使用Case/When方法再配合annotate()方法就可以优雅得实现功能。Staff.objects.filter().annotate( age_tag = Case( Whe

2021-08-23 22:27:04 510 1

原创 django 之提升查询性能

如果一个web请求需要花费几秒,99%是因为数据库没用好或是使用了低效的查询方式, 当使用 orm 的时候, 不好的设计和低效的查询方式都是会杀死你的性能, 改用子查询 annotate, 以 sql 的思维思考, 可以大幅度提高你的 web 性能。有一个City model,其中有一个计算城市人口密度的方法density。modes.py:class State(models.Model): name = models.CharField(verbose_name="名称", max_len

2021-08-18 00:02:19 682

原创 django 之深入理解 MVT 模式

概述django 框架是在 2005 年开源,是迄今为止 python web 开发界名气最大的框架, 以 github 星星数量来比, 它遵循 Model-View-Template 开发模式,那么在使用之前就必须了解 django 的 MVT 架构设计。django 开发模式:MVT 模式说道 MVT 模式就不得不提 MVC, MVC 是由视图View、控制器Controller、模型Model组成,在我们实际使用中模型主要负责应用程序核心逻辑, 视图用来处理和客户端的交互操作, 控制器定义程序行

2021-08-17 22:37:27 1626

原创 Django 项目中的规范和细节

代码中一些细节问题在定义参数字段时尽量根据实际场景来, 不要定义太通用的字段或者不明确的字段。task_id = request.GET.get("id")建议为:task_id = request.GET.get("task_id ")格式化尽量使用 f-string 关键字,使更清晰简洁并且在直观性上也很突出, 最重要的一点是 f-string 是 python三种格式化方式中效率最高的, 在 python3.6 之后版本的新特性, 使用了新的字节码指令, 底层也进行了优化。

2021-08-12 23:25:37 424 2

原创 Django 之数据库访问优化

概述Django 提供了很多 queryset 方法和管理器来帮助开发者最大限度的去操作数据库,本文收集了其他网站相关链接,总结了尝试优化数据库使用时的步骤。性能分析工具查询总是要花费代价的,这个不用多说,那么数据库是如何执行特定的 queryset 的?请总是记住每次修改都要进行性能分析,确保修改时有效的,有好处的,但有可能是不适用的,甚至带来一些查询困难。queryset.explain()或是一个外部项目:dajngo-debug-toolbar或是一个监控数据库的工具数据库优化技

2021-07-23 16:02:28 315 1

原创 Django REST Framework 解决 CSRF Failed: CSRF token missing or incorrect.

出现原因当您使用SessionAuthentication 时,您正在使用 Django 的身份验证,这通常需要检查 CSRF。Django REST Framework 强制执行此操作,仅适用于SessionAuthentication,因此您必须在X-CSRFToken标头中传递 CSRF 令牌。出现场景在对外提供一些开放性 api 时,对方是不需要携带 csrf_token 的,但是在我们框架中是使用了 SessionAuthentication 方式对用户进行认证的,自己使用时我们会遵守认证方

2021-07-08 13:25:53 3602

原创 Django 使用 Haystack 实现检索功能

全文检索和搜索引擎原理搜索需求当用户再搜索框中输入关键字后,我们要为用户提供相关的搜索结果搜索实现django 中是使用 icontains 去模糊匹配,但是底层会转换成 like 去查询但是 like 关键字的效率很低,如果数据库中有百万计数据,那么 like 查询是很慢的如果查询需要在多个字段中进行,使用 like 关键字也不是很方便全文搜索方案引入全文检索的方案来实现商品搜索即在指定的任意字段中进行检索查询全文检索需要配合搜索引擎来实现(elasticsearch、sol

2021-05-10 11:27:41 810 2

原创 Django 使用 token 认证

场景说明web 网站登录认证一般常用的有三种方式:session:早期以 web 为主token:适用于 web、appoauth:微信、QQ登录目前在 django 中使用 session 认证的方式比较多,因为 django 内置了强大的用户认证系统–auth模块。下面会结合 session 和 token 两种认证方式做一个登录的示例。session 登录认证示例views.py:def query(request): if request.method == 'GET'

2021-05-08 22:31:46 9495 5

原创 Celery 和 Signal 的区别

不知道有没有人把 Celery 和 Signal 搞混,我之前也是有点含糊,两者原理都是去触发一些任务,那么这两者有什么区别呢?Celery :异步Signal: 同步下面使用 Celery 和 Signal 分别做一个发送短信的示例。CeleryCelery 是开一个线程异步去执行这个任务,具体耗时多久都在这个线程中去处理这些逻辑,不会影响下面的操作,比如发送短信、邮件等。发送短信示例:celery 基础配置:# project/celery.pyimport osfrom ce

2021-05-08 18:40:31 7662 2

原创 Django 之 Celery

什么是任务队列任务队列一般用于线程或计算机之间分配工作的一种机制。任务队列的输入是一个称为任务的工作单元,有专门的职程(Worker)进行不断的监视任务队列,进行执行新的任务工作。 Celery通过消息机制进行通信,通常使用中间人(Broker)作为客户端和职程(Worker)调节。启动一个任务,客户端向消息队列发送一条消息,然后中间人(Broker)将消息传递给一个职程(Worker),最后由职程(Worker)进行执行中间人Broker)分配的任务。Celery 可以有多个职程(Worker)和

2021-05-03 17:11:57 1135 4

原创 Django 使用已经存在的数据库

虽然 Django 很适合开发新应用,但也能用它集成旧数据库。Django 包含了一整套套件来尽可能自动处理类似的任务。本文假设你有 Django 基础,基础内容由 教程 介绍。你配置完 Django 后,你就能跟着此常规操作去集成旧数据库了。自动生成这些模型Django 自带一个叫做 inspectdb 的工具,它可以通过内省已存在的数据库创建对应模型。你能通过运行以下命令看到输出:$ python manage.py inspectdb通过标准 Unix 输出重定向将其保存为文件:$ p

2021-04-21 17:50:06 1736

原创 搭建基于 Docker 的 CI/CD

安装 Docker安装这里就不在赘述,详情可以看下面这条链接。docker 基础和安装:https://blog.csdn.net/qq_39253370/article/details/115430300CI/CD 概念持续集成(Continuous Integration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。持续部署(Continuous Deployment,CD):部署到测试环境、预生产环境、生产环境。持续交付(Continuous Deliv

2021-04-15 14:58:32 1713

原创 Docker 监控

cAdvisor用于收集正在运行的容器资源使用和性能信息。安装:docker run -d \--volume=/:/rootfs:ro \--volume=/var/run:/var/run:ro \--volume=/sys:/sys:ro \--volume=/var/lib/docker/:/var/lib/docker:ro \--volume=/dev/disk/:/dev/disk:ro \--publish=8080:8080 \--detach=true \--nam

2021-04-09 15:48:48 234

原创 Docker基础

什么是Docker?听说 docker 也有很长一段时间了,工作中也在用,现在就来总结一下,下面几句文案摘自菜鸟教程,哈哈~~~Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口, 下面会讲到。Docker 从 17.03 版本之后分为 CE(Community Edi

2021-04-04 17:57:00 304 1

原创 Django 跨域问题解决

什么是跨域?在前后端分离的项目中,跨域是一个必不可少的问题,也是一个很正常的问题,那么什么是跨域?跨域就是基于同源策略,不同IP、域名、端口都算作跨域。同源策略是浏览器的安全策略。同源:同源(ip地址、协议、端口都相同才是同源),不同源就是跨域跨域:分为简单请求跨域和复杂请求跨域报错如下:Access to XMLHttpRequest at 'http://xx.xx.xx:80/api/otp/send-code'from origin 'http://localhost:8080'

2021-04-02 22:03:55 2005 3

原创 pycharm 配置远程连接服务器开发环境

打开 File-settings-python interpreter:配置完成后,如图:配置好之后可以从服务器上面下载文件,也可以上传文件:自己全部完成后可以做一个测试,如在文件增加一些代码并保存,看服务器上面是否发生变化:在test 文件中打印一句 111linux 服务器上面:打工告成,哈哈…...

2021-04-01 23:36:09 490

原创 Django 项目之快速和前端联调接口

出现的问题点:前后端如果不在一块,需要将部署到服务器上面供前端使用,如果问题很多,那么就要频繁上传代码,run 起来,中间可能浪费很多时间。如果在一起办公,那么可以很方便的沟通,只是沟通效率提高了,但是也没有解决联调的效率性,究竟怎么样的项目架构可以使得前后端都可以很快的联调接口呢项目架构如果是前后端分离的,一般我们采用前端新建一个项目,在编写的过程中去调用后端的接口,项目目录如下:后端人员也会创建一个后端的项目,这里使用 django 举例,目录结构如下:第三种方式是两者结合在一起,

2021-04-01 23:01:28 1407 2

原创 使用 Docker 部署 Django 项目

之前写过一篇使用 centos7+nginx 部署 django 项目的博文,此项目因为是前后端不分离的模式,一些静态文件需要使用 nginx 代理才能访问,没有使用到 docker。原文连接:https://blog.csdn.net/qq_39253370/article/details/106454587目录结构如果是前后端分离的话,后端只需要提供接口就行,另外加一些权限控制,部署起来也相对简单。有两个文件需要注意一下:pip.conf:替换 pip 源,下载第三包会很快start.s

2021-04-01 22:20:36 1614

原创 redis 报错解决与常用配置

安装 redis下载链接:如下载不成功可自行到官网下载 https://download.redis.io/releaseswget https://download.redis.io/releases/redis-6.2.1.tar.gz?_ga=2.213148948.1866727870.1617073678-1341157963.1617073678--2021-03-30 11:19:41-- https://download.redis.io/releases/redis-6.2.1.t

2021-03-30 14:46:56 593

原创 腾讯云上传文件出现的问题:in a frame because it set ‘X-Frame-Options‘ to ‘deny‘.

问题截图解决方案在django settings配置文件中:X_FRAME_OPTIONS = 'SAMEORIGIN' # 表示该页面可以在相同域名页面的frame中展示。

2021-03-06 13:38:11 206

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除