![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 73
部长y
人生苦短,我用Python
展开
-
django 深入分析 Manager 和 QuerySet 的区别
这个要熟悉管理器的查询逻辑,上述源码看到管理器是具有 QuerySet 的方法的,那么如果想修改初始的 QuerySet 方法或者想添加额外的 Manager 方法和一些具有辨识度的方法,比如 AbstractUser 的默认管理器中就有 create_user 这样的方法。原创 2023-04-02 23:02:38 · 430 阅读 · 1 评论 -
深入分析 AbstractBaseUser 和 AbstractUser 的区别
AbstractBaseUser中只含有3个字段: password, last_login和is_active,方法也仅包含以下一些身份验证功能和密码存储功能。注意一:用户唯一身份的字段但是需要注意的是你的拓展模型必须有一个可用于识别目的的唯一字段。这可以是一个用户名,一个电子邮件地址,或任何其他独特的属性。如果你使用可以支持的自定义认证后端,则允许使用非唯一的用户名字段。下列 identifier 将被用作识别字段。识别字段:能代表用户唯一身份的字段,比如是 username、email 等注意原创 2023-03-30 23:04:34 · 439 阅读 · 0 评论 -
Django 之前端获取 csrftoken 的几种方式以及源码解释(超详细)
如果是前后端不分离的项目,django 为了防止 XSS 攻击,要求所有 form 表单提交时加上 标签,前端会再 html 中加入一个 input 标签 这个中间件就是来验证 csrf_token 如果没有加,就会出错,这个 token 每次刷新页面时都会刷新,客户在请求时。会再服务器端生成一个 token,然后放在 cookie里面,每次 post 请求都会带上这个 token,去和表单里面的去对比。官⽅⽂档中说到,检验token时,只⽐较secret是否和cookie中的secret值⼀样,⽽不是原创 2022-06-10 13:36:04 · 4659 阅读 · 0 评论 -
Django 认证流程源码分析以及自定义 Backend(超详细)
django 有自己的认证方法,不过是基于用户名密码(根据自然键 的方式,实现简单的认证方式,如下:authenticate 源码循环每一个 backend,执行里面的 authenticate 方法,该方法一定要实现。默认的认证方式:没有定义 AUTHENTICATION_BACKENDS ,那么去哪里找它用了那个 backend 呢,可以去全局去找,里面肯定有默认的 backend。...原创 2022-06-07 20:34:14 · 1032 阅读 · 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 · 1685 阅读 · 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 · 229 阅读 · 0 评论 -
Django REST Framework 之限流、版本、解析器源码解析(超详细)
限流可以对接口访问的频次进行限制,以减轻服务器压力。自定义限流思路:实现机制:自定义一个字典,key 为唯一标识,可以是 ip 地址、用户名、用户id 等,value 为一个列表,存储时间,如限制十秒内访问三次:{"ip": [16:20:20,16:20:30,16:20:40]}思路: 如果用户没访问过就创建改用户的访问记录并记录时间 如果用户已经访问过,获取用户访问历史,并且判断最后一次访问时间是否小于当前时间减去10秒 如果小于说明是满足间隔时间,那么就把最后一条数据删除 限制判断原创 2022-05-10 19:06:22 · 865 阅读 · 0 评论 -
Django REST Framework 之认证、权限(超详细)
Django 中认证和权限在没有使用 drf 之前,如何判断用户是否登录,一般是给前端提供一个获取用户信息的接口,如果未登录返回未授权等信息,权限的话一般是在 model 层通过字段来设置,这样只能完成简单的权限限制。原创 2022-05-07 17:43:06 · 3887 阅读 · 6 评论 -
Django REST Framework 之基于游标、偏移量的分页
分页方式普通分页:看第几页,每页显示多少条数据基于偏移量分页,在某个位置,向后查看多少条数据(offset limit)游标分页,加密分页,只能看上一页和下一页,记录当前id的最大值和最小值原创 2022-05-06 18:04:33 · 1135 阅读 · 0 评论 -
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 · 1841 阅读 · 0 评论 -
git 如何合并 commit ?(必看篇)
项目协作在项目开发时,每天会提交大量的代码,也会有很多 commit 记录,那么要不要处理这些 commit 记录。当然不处理这些 commit 记录也能进行代码合并,就是记录有点多,并且每个 commit 可能获知的信息不那么全,如果合并一下这些 commit 并添加一些这些 commit 的总的概览,这样看起来 commit 记录也少了很多,并且都是有用的提交记录。合并 commitgit log: 查看提交历史上述有五个 commit 记录。如果我想合并四个 commit 记录:git原创 2022-04-19 16:58:36 · 28317 阅读 · 3 评论 -
PowerDesigner 连接 MySQL 数据库关注步骤与注意点
连接 Mysql 数据库新建 PDM(物理数据模型),也就是存在主外键关系的 model,与之相反的是逻辑数据模型(存在主外键关系), PDM 以图形化的方式展示和设计数据库, 创建 PDM 有几种方式,使用设计环境直接创建PDM也可以连接数据库进行逆向生成,本文主要讲解如何使用已经创建好的数据库生成 PMD。选择驱动程序时要注意,位数需要和 powerdesigner 位数一致,不然无法找到。驱动程序下载地址:https://dev.mysql.com/downloads/connec原创 2022-04-05 13:31:18 · 6171 阅读 · 3 评论 -
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 · 489 阅读 · 1 评论 -
如何讲好一堂课?
背景不管是在公司中还是学校中,都会遇到知识的分享或者是自己的一些总结陈述,有的讲的磕磕绊绊,有的就是念一些 PPT 稿子,如何有条例的自然的表达出来这就很重要,这个比较考验个人的表达能力和专业知识,表达能力和专业知识这个可以通过后期的努力去提高,但是内容怎么展开节奏去讲,怎么让别人融入到你的课堂氛围中,下面是我个人总结和参考一些网上资料进行的整理。讲课流程敬业精神抱着把内容讲好的信念,决定去给别人传授知识点就要做充分的准备,进行教学的准备和大纲设计。框架、原理说清楚说是干什么用的和其他框架原创 2021-11-26 11:21:19 · 361 阅读 · 0 评论 -
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 · 6558 阅读 · 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 · 13901 阅读 · 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 · 1694 阅读 · 0 评论 -
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 · 358 阅读 · 0 评论 -
一位高级工程师醉酒后的独白
优秀经理的品质与优秀工程师的许多品质相同。好的代码是初级工程师可以理解的代码。伟大的代码可以被第一年的 CS 新生理解。最好的代码是根本没有代码。如果我发现自己认为自己是房间里最聪明的人,那么就该离开了。我们应该雇佣更多的实习生,他们很棒。那些精力充沛的小家伙用他们的想法乱搞。如果他们可以质疑或批评某事,那就更好了。我喜欢实习生。不要遇见你的英雄。我花了 5000 美元参加了我的一位英雄的课程。他是一个才华横溢的人,但最后我意识到他和我们其他人一样在做事时正在编造。技术栈很重要。好的,我只是说技.原创 2021-08-24 11:14:04 · 158 阅读 · 0 评论 -
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 · 566 阅读 · 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 · 728 阅读 · 0 评论 -
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 · 1818 阅读 · 0 评论 -
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 · 517 阅读 · 2 评论 -
Django 之数据库访问优化
概述Django 提供了很多 queryset 方法和管理器来帮助开发者最大限度的去操作数据库,本文收集了其他网站相关链接,总结了尝试优化数据库使用时的步骤。性能分析工具查询总是要花费代价的,这个不用多说,那么数据库是如何执行特定的 queryset 的?请总是记住每次修改都要进行性能分析,确保修改时有效的,有好处的,但有可能是不适用的,甚至带来一些查询困难。queryset.explain()或是一个外部项目:dajngo-debug-toolbar或是一个监控数据库的工具数据库优化技原创 2021-07-23 16:02:28 · 344 阅读 · 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 · 4075 阅读 · 0 评论 -
Django 使用 Haystack 实现检索功能
全文检索和搜索引擎原理搜索需求当用户再搜索框中输入关键字后,我们要为用户提供相关的搜索结果搜索实现django 中是使用 icontains 去模糊匹配,但是底层会转换成 like 去查询但是 like 关键字的效率很低,如果数据库中有百万计数据,那么 like 查询是很慢的如果查询需要在多个字段中进行,使用 like 关键字也不是很方便全文搜索方案引入全文检索的方案来实现商品搜索即在指定的任意字段中进行检索查询全文检索需要配合搜索引擎来实现(elasticsearch、sol原创 2021-05-10 11:27:41 · 869 阅读 · 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 · 10076 阅读 · 5 评论 -
Celery 和 Signal 的区别
不知道有没有人把 Celery 和 Signal 搞混,我之前也是有点含糊,两者原理都是去触发一些任务,那么这两者有什么区别呢?Celery :异步Signal: 同步下面使用 Celery 和 Signal 分别做一个发送短信的示例。CeleryCelery 是开一个线程异步去执行这个任务,具体耗时多久都在这个线程中去处理这些逻辑,不会影响下面的操作,比如发送短信、邮件等。发送短信示例:celery 基础配置:# project/celery.pyimport osfrom ce原创 2021-05-08 18:40:31 · 7726 阅读 · 2 评论 -
Django 之 Celery
什么是任务队列任务队列一般用于线程或计算机之间分配工作的一种机制。任务队列的输入是一个称为任务的工作单元,有专门的职程(Worker)进行不断的监视任务队列,进行执行新的任务工作。 Celery通过消息机制进行通信,通常使用中间人(Broker)作为客户端和职程(Worker)调节。启动一个任务,客户端向消息队列发送一条消息,然后中间人(Broker)将消息传递给一个职程(Worker),最后由职程(Worker)进行执行中间人Broker)分配的任务。Celery 可以有多个职程(Worker)和原创 2021-05-03 17:11:57 · 1194 阅读 · 4 评论 -
Django 使用已经存在的数据库
虽然 Django 很适合开发新应用,但也能用它集成旧数据库。Django 包含了一整套套件来尽可能自动处理类似的任务。本文假设你有 Django 基础,基础内容由 教程 介绍。你配置完 Django 后,你就能跟着此常规操作去集成旧数据库了。自动生成这些模型Django 自带一个叫做 inspectdb 的工具,它可以通过内省已存在的数据库创建对应模型。你能通过运行以下命令看到输出:$ python manage.py inspectdb通过标准 Unix 输出重定向将其保存为文件:$ p原创 2021-04-21 17:50:06 · 1773 阅读 · 0 评论 -
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 · 274 阅读 · 0 评论 -
Docker基础
什么是Docker?听说 docker 也有很长一段时间了,工作中也在用,现在就来总结一下,下面几句文案摘自菜鸟教程,哈哈~~~Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口, 下面会讲到。Docker 从 17.03 版本之后分为 CE(Community Edi原创 2021-04-04 17:57:00 · 396 阅读 · 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 · 2134 阅读 · 3 评论 -
pycharm 配置远程连接服务器开发环境
打开 File-settings-python interpreter:配置完成后,如图:配置好之后可以从服务器上面下载文件,也可以上传文件:自己全部完成后可以做一个测试,如在文件增加一些代码并保存,看服务器上面是否发生变化:在test 文件中打印一句 111linux 服务器上面:打工告成,哈哈…...原创 2021-04-01 23:36:09 · 541 阅读 · 0 评论 -
Django 项目之快速和前端联调接口
出现的问题点:前后端如果不在一块,需要将部署到服务器上面供前端使用,如果问题很多,那么就要频繁上传代码,run 起来,中间可能浪费很多时间。如果在一起办公,那么可以很方便的沟通,只是沟通效率提高了,但是也没有解决联调的效率性,究竟怎么样的项目架构可以使得前后端都可以很快的联调接口呢项目架构如果是前后端分离的,一般我们采用前端新建一个项目,在编写的过程中去调用后端的接口,项目目录如下:后端人员也会创建一个后端的项目,这里使用 django 举例,目录结构如下:第三种方式是两者结合在一起,原创 2021-04-01 23:01:28 · 1501 阅读 · 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 · 1670 阅读 · 0 评论 -
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 · 632 阅读 · 0 评论 -
腾讯云上传文件出现的问题:in a frame because it set ‘X-Frame-Options‘ to ‘deny‘.
问题截图解决方案在django settings配置文件中:X_FRAME_OPTIONS = 'SAMEORIGIN' # 表示该页面可以在相同域名页面的frame中展示。原创 2021-03-06 13:38:11 · 227 阅读 · 0 评论 -
Django使用图片验证码加邮箱或手机号登录
实现页面效果实现思路使用form渲染数据校验手机号(格式、是否注册)、密码以及验证码生成图片验证码'''pillow:是python处理图片的模块,很强大'''import randomfrom PIL import Image, ImageDraw, ImageFontdef picture_code(): def get_char(): '''通过数字获取ASCII表中的对应字母''' return chr(random.randi原创 2021-03-01 22:54:39 · 318 阅读 · 0 评论 -
Django 使用短信验证码登录
实现页面效果实现思路当输入手机号时需要检测该手机号是否注册过,然后点击登录时一起将手机号和验证吗提交给后端,再次校验手机号和验证码。这里使用form的方式将字段渲染再前端,在form中校验字段。画页面首先将字段传入到模板中:views.py:def login_sms(request): if request.method == 'GET': form = LoginSmsForm(request.GET) return render(request,原创 2021-03-01 22:09:18 · 2755 阅读 · 0 评论