Django
文章平均质量分 53
蓝绿色~菠菜
对技术有一颗敬畏和严谨之心,对代码有精益求精的精神。像养小孩和女朋友一样,精心照料和打扮。想清楚了再干,坚持高标准,Design for future!
展开
-
Nginx+Gunicorn(开启多worker)运行Django/Flask应用程序时关于共享内存(全局变量)的注意事项
关于单例模式:问题:单例模式在本地测试时一切正常,当运行在生产环境下,单例不生效,会创建出多个实例。原因:Django/Flask本地环境的runserver为单进程多线程,单进程下当然共享一份内存,而在生产环境的多worker下,每个进程都有自己的内存空间,因此也有自己的实例。关于全局变量:同样的问题,在生产环境中,多个worker之间是无法共享一个全局变量的,一个work...原创 2020-04-22 14:13:13 · 3323 阅读 · 0 评论 -
django Model层常用验证器及自定义验证器
在Django中,对数据进行校验有两种方式:一种是通过Form校验,一种是通过Model校验。在此,我对Model中的校验方法做下记录。示例之前补充以下几点:1、Django数据校验方式分为以下三步:Model.clean_fields() 验证字段基本规则比如长度格式等; Model.clean() 可自定义验证条件和报错信息;...原创 2019-09-23 15:40:11 · 4697 阅读 · 0 评论 -
Django当DEBUG = False时,信号不触发问题
还需要注意的是,Django 默认将信号处理程序存储为弱引用,所以如果你的处理程序是一个本地函数,它可能会被垃圾回收。为了防止这种情况,当你调用信号的。同一个文件中的信号处理函数名称不能一样,否则靠前的函数会被垃圾回收,除非传入weak=False参数声明为强引用。今天突然发现生产环境中,某些信号没有被正确触发,一番调查总结一下关于django信号执行问题。原创 2023-07-18 11:49:05 · 1315 阅读 · 0 评论 -
使用django_celery_beat在admin后台配置计划任务
django中使用celery做异步任务和计划任务最头疼的点就是包之间版本兼容性问题,项目一启动花花报错,大概率都是版本问题。每次都会花很大时间在版本兼容性问题上。如果是其他版本的django且有兼容性问题,推荐一个工具。,这玩意可以清晰展示包间依赖关系和版本冲突,很方便。原创 2023-04-26 16:43:09 · 982 阅读 · 2 评论 -
Django DRF全局开启模糊查询
DjangoFilterBackend或者RestFrameworkFilterBackend在做指定字段查询时,默认为精确查询,如api/v1/brand/brands/?name=huawei可以查到,api/v1/brand/brands/?name=hua是查不到的。此时可以开启全局模糊查询,修改django settings配置文件:REST_FRAMEWORK = { 'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S', 'DEFAULT.原创 2022-03-09 16:12:07 · 790 阅读 · 2 评论 -
Django 事务ATOMIC_REQUESTS
Django 的默认事务行为Django 的默认行为是以自动提交模式运行。除非事务处于活动状态,否则每个查询都会立即提交到数据库。将事务绑定到HTTP请求在 Web 上处理事务的常用方法是将每个请求包装在事务中。在要为其启用此行为的每个数据库的配置中设置ATOMIC_REQUESTS为True。DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'tes原创 2022-02-15 11:05:44 · 1285 阅读 · 0 评论 -
Django自定义FilterSet
需求:根据时间范围过滤数据实现:1、定义FilterSetimport django_filtersclass TimeFilterSet: """根据时间范围过滤""" filter_map = { 'Date': django_filters.DateFilter, 'Time': django_filters.DateTimeFilter, 'DateTime': django_filters.DateTimeFilte原创 2021-12-09 17:26:15 · 1874 阅读 · 0 评论 -
Django migrate --fake 与 --fake-initial
django migrate迁移时会依次执行四件事:1、迁移判定,将你的项目中所有未迁移的变动文件进行迁移(django会去查询django_migrations表判断你是否有新的迁移变动)2、迁移映射关系 django_contenttype表新增映射关系(app与模型关系)3、迁移权限auth_permission表新增权限4、执行迁移,生成数据表,或变动migrate --fake 只执行第一步,并生成迁移记录。migrate --fake-initial 执行前...原创 2021-12-07 11:53:55 · 719 阅读 · 0 评论 -
基于Django实现多租户项目连接不同数据库
多租户数据库架构可分为三种类型,即独立数据库 共享数据库,隔离数据架构 共享数据库,共享数据架构以 Django+第二种数据库隔离架构 为例,实现多租户连接saas平台。django项目创建过程请自行完成,以下只演示关键步骤。一、编写db_router不同租户连接不同数据库,django通过自定义数据库路由来实现:from itom_cmdb.libs.utils.tenant import TenantUtilclass DBRouter: def db_fo原创 2021-07-31 15:42:00 · 1709 阅读 · 8 评论 -
Django开启USE_TZ = True时,以时间为参数查询结果为空
django开启时区设置USE_TZ = True时,如果想查询某一天或者某个月的数据,那大概率会返回一个空的queryset。如下:>>> Supplier.objects.filter(create_time__month=7)<QuerySet []>原因:在查询之前,日期时间字段将转换为指定时区的时间,而转化时需要在数据库中定义时区表。官方文档queryset.解决办法:执行如下命令,将系统时区文件到入到数据库表中:mysql_t原创 2021-07-23 14:44:35 · 501 阅读 · 1 评论 -
Django文件下载方法总结
方法一:使用HttpResonseimport osfrom django.http import HttpResponse def media_file_download(request, file_path): with open(file_path, 'rb') as f: response = HttpResponse(f) response['content_type'] = "application/octet-stream" ...原创 2021-04-14 15:54:06 · 1160 阅读 · 3 评论 -
Django关于options/delete请求会被重定向到get请求的问题
使用postman测试接口,执行的是Options请求,但莫名其妙会被重定向到GET请求,加上/才会正常响应。[04/Mar/2021 15:36:32] "OPTIONS /goods/goods HTTP/1.1" 301 0[04/Mar/2021 15:36:32] "GET /goods/goods/ HTTP/1.1" 200 1344然后去找了Django的官方文档,发现APPEND_SLASH属性。APPEND_SLASH Default: True When set t原创 2021-03-04 15:40:47 · 799 阅读 · 3 评论 -
Django的INSTALLED_APPS中应该写app名,还是AppConfig子类?
当你使用python manage.py startapp app01的命令创建了一个名为app01的新应用后,通常接下来要做的就是在settings.py里注册它,把它加到INSTALLED_APPS里去。你可以选择直接添加app名,还可以添加该app对应的配置AppConfig子类。到底哪种方式更好呢?# settings.py 注册app# 方式1:直接加入app名,INSTALLED_APPS = [ 'django.contrib.admin', 'app01',]原创 2021-05-17 10:39:34 · 1615 阅读 · 2 评论 -
Django request.POST 、 request.body 、request.data使用
request.POST(只能获取表单数据) 、 request.body(获取非表单数据) 是django原生的属性,request.data(包含表单及非表单数据)则是DRF封装的属性。 表单数据:a = request.POST.get('a') alist = request.POST.getlist('a') Content-Type(请求头)为application/x-www-form-urlencoded(form表单默认格式) 非表单...原创 2021-05-14 10:22:45 · 7454 阅读 · 0 评论 -
Django模板中使用Vue语法
html文件内容如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>TestManager</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body原创 2020-12-23 18:02:10 · 1272 阅读 · 0 评论 -
Django ORM中原生JSONField的使用方法
Django最新版v3.1的主要更新之一便是完善了对JSON数据存储的支持,新增models.JSONField和forms.JSONField,可在所有受支持的数据库后端上使用目前支持的数据库以及对应版本主要有MariaDB 10.2.7+,MySQL 5.7.8+,Oracle,PostgreSQL和SQLite 3.9.0+,但个别Django的查询方法可能与部分数据库不兼容,例如contains和contained_by就不支持Oracle和SQLite数据库JSONField使用fr原创 2020-12-11 14:36:53 · 5316 阅读 · 0 评论 -
Django如何使用动态字段查找过滤QuerySet
这种写法是不行:field = 'name'value = '张三'Persion.objects.filter(field=value)要像这样:kwargs = { '{0}__{1}'.format('name', 'startswith'): 'A', '{0}__{1}'.format('name', 'endswith'): 'Z'} Person.objects.filter(**kwargs)...原创 2020-12-07 13:35:34 · 634 阅读 · 0 评论 -
Django lazy、LazyObject懒加载使用
惰性加载是一种延迟计算的技术,当只有真正需要使用结果的时候才会去计算。Django提供了两种惰性加载模块,分别是lazy和LazyObject,前者主要针对可以调用的对象,延迟函数的调用;后者针对类,延迟类的实例化。如果想要让某个类有延迟实例化的功能,必须做两件事情:1)继承LazyObject; 2)实现_setup方法。例子:# 有延迟实例化需求的类DemoObjectclass DemoObject(object): def __init__(self):原创 2020-10-29 14:53:17 · 817 阅读 · 0 评论 -
Django import_module/import_string用法
import_module:输入一个字符串,形如‘django.contrib.auth.backends’返回一个模块即:backends,然后可以通过模块调用模块中的类:backends.ModelBackend()def import_module(name, package=None): """Import a module. The 'package' argument is required when performing a relative import. I原创 2020-10-29 13:52:26 · 964 阅读 · 0 评论 -
Django动态修改(生成)序列化器
我为什么要这样做呢?1、前端有需求,对同一个模型,某些页面仅需展示较为精简的几个字段,而有些页面则要展示更为详细的模型信息。2、业务有需求,模型所涉及的字段本身是动态变化的,比如一个账号系统模型,创建账号时根据账号类型的不同而使用不同的字段去存储账号信息(银行账号:卡号/密码/开户行等,web系统账号:用户名/密码/昵称/头像等)。3、让代码逼格更高一点。较为传统的做法又是什么样的呢?if判断型:class AccountViewSet(ModelViewSet): ...原创 2020-09-23 23:03:15 · 1159 阅读 · 0 评论 -
Django中csrf-token验证原理
众所周知,django通过CsrfViewMiddleware中间件来下发和校验csrf-token有效性的。那么,这个中间到底是怎么实现token校验的呢?首先,django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 csrftoken,并把这个 csrftoken 放在 cookie 里。然后每次 POST 请求都会带上这个 csrftoken。(这个csrftoken的有效期非常长(52周)) 在前后端不分离的django项目中,可以通过{%csrf_token%}标签在表原创 2020-09-19 13:00:03 · 2268 阅读 · 0 评论 -
Django修改密码强制用户重新登录策略
django会话保持依赖两个中间件SessionMiddleware和AuthenticationMiddleware。SessionMiddleware:用于session的校验和下发(下发至request.session)AuthenticationMiddleware:通过request.session获取用户对象,并比对此时用户认证和session中存储的认证是否相同.正常使用中的登陆、退出和会话保持from django.contrib.auth import authen.原创 2020-09-05 18:19:14 · 837 阅读 · 0 评论 -
Django聚合查询annotate、aggregate使用详情
annotate:作用于queryset,其实就是给Queryset添加了一个属性,Queryset中的每个对象都会有这么一个属性。#品牌模型class Brand(models.Model): name = models.CharField(max_length=20, unique=True, verbose_name='名称') location = models.CharField(max_length=30, default='中国', blank=True, ver.原创 2020-12-31 16:27:24 · 2282 阅读 · 2 评论 -
Django模型CharField字段类型定义更为优雅的Choice
官方推荐的一种写法:class SexType(objects): MALE = 'M' FEMALE = 'F' UNKNOWN = 'N/A' CHOICES = ( (MALE, '男'), (FEMALE, '女'), (UNKNOWN, u'未知'), )class User(models.Model): username = models.CharField(max_length=20,原创 2020-08-21 11:00:19 · 1903 阅读 · 0 评论 -
数据库多级联动表结构设计
以省市区县四级联动为例:方案一:建立多个数据库表,低级表结构中只包含上一级表中id。省表 市表 区表 县表 province city district county id province_id city_id district_id 优点:此设计完全解开了各层之间的耦合性,用类似于链表的形式将多层数据关系起来。 可以节约大量的数据库空间。 维护方便。如果发生了新增和修改操作时,只要修改与之相关的那个表的主键即可。缺点原创 2020-08-11 21:27:39 · 4617 阅读 · 4 评论 -
Django为模型初始化数据
这里介绍一种使用django自带的命令行工具初始化数据库。python manage.py loaddata your_fixture.json步骤:1、创建.json数据文件init_db.json:[ { "model": "brand.brand", "pk": 50, "fields": { "name": "西门子", "first_letter": "x", "create_time": "2020-5.原创 2020-08-08 15:30:48 · 2612 阅读 · 0 评论 -
Django工程目录结构的最佳实践
多数Django工程非常混乱。不幸的是默认的Django工程布局并没有对此有任何帮助,它过于简单对工程的管理导致在处理大的工程时带来很多维护性问题。本文将帮助让你的工程有个合理的布局。致力于: 遵循最佳实践 让你的工程尽可能地直观--你(作为开发者)可以立即认出代码每个部分的作用 让你工程仍然保持规范随着你的工程中的应用越来越多。 让你工程在不同环境下部署更加方便 让其他程序员喜欢你的代码 本例项目名为mydjango,包含两个应用brand和goods原创 2020-08-08 15:29:38 · 790 阅读 · 0 评论 -
Django2.x path使用方法
新项目,新技术,关于django2.x path路由用法总结。在Django2.0其中一个新特性为:简化Url路由的语法。path与url的区别在代码上主要体现在新增了django.urls.path函数,它带来了更简洁、更可读的路由语法,如:原来的url:url(r'^articles/(?P<year>[0-9]{4})/$',views.year_archive),Django2.0新语法:path('articles/<int:year>/.原创 2020-07-17 11:19:48 · 421 阅读 · 0 评论 -
Django从请求到响应的处理流程深入剖析(源码分析)
众所周知,django项目启动命令:python manage.py runserver那么,执行runserver命令之后到底django做了哪些事情呢?1、首先,django执行Command(BaseCommand)中的execute()函数。2、execut()函数中通过调用self.handle(*args, **options)来获取WSGIHandler实例对象。3、self.handle经过一系列操作,最终调用get_wsgi_application()函数。4、get_原创 2020-06-05 17:42:11 · 1054 阅读 · 0 评论 -
Django统一处理400、403、404、500错误
直接在项目templates目录下添加400.html、403.html、404.html、500.html,其他什么都不用管。因为django帮我们写好了视图函数:django\views\defaults.py以下是defaults.py源码:from django import httpfrom django.template import Context, Engine, TemplateDoesNotExist, loaderfrom django.utils import si原创 2020-05-14 13:41:45 · 2040 阅读 · 0 评论 -
Django 查看migration文件生成的sql
小公司可能不需要,在稍微大点的公司,DBA和开发/运维是不同的部门,DBA团队为保证数据库绝对安全,通常会禁止WEB APP Server 对数据库进行DDL操作,他们必须要求你提供原生sql语句给他们,由他们来进行DDL操作。开发人员如果修改了数据库表结构,那么可以通过以下语句查看migration文件对应的sql语句:# python manage.py sqlmigrate app...原创 2020-04-22 14:44:24 · 2166 阅读 · 0 评论 -
Django的STATICFILES_DIRS、STATIC_ROOT、STATIC_URL、MEDIA_ROOT详解
STATICFILES_DIRS:django静态文件的安放位置有两种: 1.每个app里面的static文件夹。在加载静态文件时,比如要在模板中用到静态文件,django默认会自动在每个app里面搜索static文件 夹。 2.另一种,就是在所有的app件外面,建立一个公共的文件夹如common_static。那现在的问题是如何让djang...原创 2020-04-17 10:54:52 · 1501 阅读 · 0 评论 -
Django 事务transaction.atomic()的正确用法
1原创 2020-04-16 15:17:50 · 11807 阅读 · 0 评论 -
Django中间件解析
一、什么是中间件?官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。但是由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。说的直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几...原创 2020-03-20 08:38:09 · 1327 阅读 · 0 评论 -
Django如何执行原生SQL语句
1、Manager.raw(raw_query,params=None,translations=None)raw_queryset = Person.objects.raw('SELECT * FROM myapp_person'):这个方法接受一个原始的SQL查询,执行它,并返回一个django.db.models.query。RawQuerySet实例。这个RawQueryS...原创 2020-03-13 10:31:47 · 2504 阅读 · 0 评论 -
Django如何查看ORM对应的sql 语句
使用 Django 有个很方便的东西就是它的 ORM 查询语句,但是有时候碰上一些复杂的语句,或者新用到的功能,比如 distinct, sum。我们想要知道使用 ORM 查询返回的结果是不是正确,我们可以将之对应的 MySQL 语句打印出来印证一下。有两种方法,如果是比较简单的查询语句,可以使用以下方法:ArticleInfo.objects.filter(id = 1).quer...原创 2020-03-12 09:01:25 · 1637 阅读 · 0 评论 -
Django 下拉框中去掉默认选项:‘-------’
你是否在django后台站点管理中,为select下拉框的默认值‘-------’而烦恼,比如下图中的面试部门。那么,该如何去掉这个默认值呢?两种办法:1、模型中设置外键的默认值。这样做的效果就是表单中的默认值为所有可选项的第一项。class Interview(models.Model): department = models.ForeignKey('depart...原创 2020-02-27 17:03:00 · 909 阅读 · 0 评论 -
Django自带分页器性能问题分析及优化手段
参考我的这篇博客:https://blog.csdn.net/bocai_xiaodaidai/article/details/104015031原创 2020-01-17 13:34:47 · 915 阅读 · 1 评论 -
记一次关于BinaryField类型字段对 Mysql | Django分页 | Xadmin列表页 性能影响的大调查
讲一个亲身经历的例子:本人前些日子给公司HR部门做了一个面试管理系统,基于Django框架,采用xadmin扩展。其中一个模块 简历管理模块, 主要功能是上传简历、识别简历文本/关键信息、以及存储简历文件。本来表结构已经设计的好好的,其中文件存储方式采用django默认的文件存储方式:数据库表只存放简历文件的存储路径,简历实体文件则存放在服务器硬盘上。某一天呢,我们不太懂技术的项目经理...原创 2020-01-17 10:51:12 · 2061 阅读 · 1 评论 -
Django对接Elasticsearch实现全文检索
1. 需求分析当用户在搜索框输入关键字后,我们要为用户提供相关的搜索结果。这种需求依赖数据库的模糊查询like关键字可以实现,但是like关键字的效率极低,而且查询需要在多个字段中进行,使用like关键字也不方便。我们引入搜索引擎来实现全文检索。全文检索即在指定的任意字段中进行检索查询。2. 搜索引擎原理通过搜索引擎进行数据查询时,搜索引擎并不是直接在数据库中进行查询,而是搜索...原创 2020-01-10 17:46:59 · 1196 阅读 · 6 评论