
Django
文章平均质量分 66
robch
Stay foolish Stay hungry!
展开
-
Python socket 访问网站发送 HTTP POST请求,从而深刻理解 HTTP 协议
用最原始的包 socket 来居然可以访问网站模拟发送 POST 请求,这是对最大的收获。更进一步的参考 https://www.jianshu.com/p/f196c74e72ddimport socketinput_dict = {'name':'cheng', 'age':23}s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s....原创 2019-08-02 12:14:46 · 6575 阅读 · 1 评论 -
解决Django的request.POST获取不到内容的问题
在服务器端我用request.POST期望能获取到,但是我发现获取到的是一个空的,用reqyest.body是能获取到原始的请求内容key2=value2&key1=value1的。转载 2022-09-11 10:16:07 · 1799 阅读 · 0 评论 -
Django 登录过程中,浏览器 cookie 的变化
myself_login 函数对应的 URL 是:host:port/myself_login/Django 响应头的Set-Cookie.pngDjango 对 http请求的封装:原创 2022-06-15 17:24:47 · 350 阅读 · 0 评论 -
3-2.http 请求头Content-Type 为application/x-www-form-urlencoded
本文测试 Content-Type 为 multipart/form-data 的请求详情:前端页面模仿用户输入:用户名、密码、性别、爱好、城市、等,可以看到请求头中前端的HTML内容:后端的打印:后端是 Django 项目,没有引入DjangoRestFrameworkINFO 2022-03-29 13:27:59,690 view 19440 140219944793856 In helloFrontLabelBase, To test the text/radio/checkbox/fil原创 2022-03-29 14:12:12 · 7672 阅读 · 0 评论 -
3-3.http 请求头Content-Type 为 multipart/form-data
本文测试 Content-Type 为 multipart/form-data 的请求详情:前端页面模仿用户输入:用户名、密码、性别、爱好、城市、上次文件等,可以看到请求头中:Content-Typemultipart/form-data; boundary=---------------------------217751028913459671582016487482消息头:请求:...原创 2022-03-29 13:10:17 · 10848 阅读 · 0 评论 -
3-1.对于 HTTP 请求,怎么能控制让浏览器弹窗下载附件
Django 服务端在返回前,设置response 的 Content-Dispositiondef hello_attachment(request): print 'In the hello_attachment, To test the attachment' students = {'name':'rob','age':22, 'subjects':['math', 'english'], 'comment':'the mock data is from django server原创 2022-02-25 18:48:35 · 1396 阅读 · 0 评论 -
HTTP协议细节集锦:Accept-Language 和 CORS 和 WebSocket
对于最早期的HTTP/1.0协议,每次发送一个HTTP请求,客户端都需要先创建一个新的TCP连接,然后,收到服务器响应后,关闭这个TCP连接。由于建立TCP连接就比较耗时,因此,为了提高效率,HTTP/1.1协议允许在一个TCP连接中反复发送-响应,这样就能大大提高效率。(HTTP 1.1允许浏览器和服务器在同一个TCP连接上反复发送、接收多个HTTP请求和响应,这样就大大提高了传输效率。)因为HTTP协议是一个请求-响应协议,客户端在发送了一个HTTP请求后,必须等待服务器响应后,才能发送下一个请求,原创 2021-05-07 11:31:06 · 2010 阅读 · 0 评论 -
Django Incorrect string value xxx for column xxx
在 Django 的视图函数中有时需要保存前端传输过来的数据:包括文本文件和表情。这是在开发工单系统保存回滚 SQL 时遇到的问题。为了可以保存表情需要(不能用utf-8字符集在MySQL中存储4字节字符.):更改MySQL数据库、表和列,以使用utf 8mb4字符集(只可从mysql 5.5开始使用) alter table db_task_progress modify name text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COM原创 2020-12-25 17:28:18 · 223 阅读 · 0 评论 -
django 多数据库配置
在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接。修改项目的 settings 配置在 settings.py 中配置需要连接的多个数据库连接串 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'sqlite3'),转载 2020-11-02 14:54:43 · 178 阅读 · 0 评论 -
Django web请求是怎么建立数据库连接的以及CONN_MAX_AGE的作用
通过CONN_MAX_AGE优化Django的数据库连接:上周对我们用Django+Django-rest-framework提供的一套接口进行了压力测试。压测的过程中,收到DBA通知——数据库连接数过多,希望我们优化下程序。具体症状就是,如果设置mysql的最大连接数为1000,压测过程中,很快连接数就会达到上限,调整上限到2000,依然如此。Django的数据库连接:Django对数据库的链接处理是这样的,Django程序接受到请求之后,在第一访问数据库的时候会创建一个数据库连接,直到请求结束,原创 2020-09-09 16:32:35 · 2438 阅读 · 0 评论 -
nginx+uWSGI+django 处理请求详解
请求从 Nginx 到 uWSGI 到 django 交互概览作为python web开发,我们首先要弄清楚,到底一个请求过来,发生了什么事,请求的传递是怎么样完成的,由nginx是怎么转发到uwsgi, uwsgi又是怎样把请求传给到我们的框架(django or falsk)由我们自己写的代码处理,返回数据给客户端的。因此我作了以下一个粗略的流程图:在此之前,先确认下概念:uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议以下我会逐个步骤从下往上详细讲解,并附上代码和配原创 2020-08-25 09:52:37 · 806 阅读 · 0 评论 -
自行实现 API 请求认证
在 HTTP 的 API 请求,作为后台服务需要知道请求者是谁,当然对 Django 项目有好多现成的解决方案 DRF token 和 JWT token 等,现在咱们说一种土方法。class Token(object): def __init__(self, user, passwd): self.user = user self.passwd = passwd def get_token(self): # 1. 用随机值原创 2020-07-28 17:54:10 · 371 阅读 · 0 评论 -
curl -u 背后的内容以及和 Django rest framework 的 BasicAuthentication 的呼应
curl -u 的基本介绍curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。-u参数用来设置服务器认证的用户名和密码。$ curl -u 'bob:12345' https://google.com/login上面命令设置用户名为 bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym原创 2020-06-27 20:43:13 · 6114 阅读 · 1 评论 -
Django runserver 默认是多线程模式---通透
本文目录1.Django 多线程1.1 环境1.2 Django原生单线程1.3 Django server 默认多线程2. 使用 uWSGI 服务器启动 django2.1 启动 uWSGI2.2 给uWSGI加进程数3. 总结关于django的多线程问题1.Django 多线程Django 多线程1.1 环境Python3.7.3Django==2.0.7uWSGI==2.0.181.2 Django原生单线程django 原生为单线程序,当第一个请求没有完成时,第二个请求辉阻塞,知转载 2020-05-13 17:28:46 · 3743 阅读 · 0 评论 -
Django 之终端打印SQL语句
在开发 Django 项目的时候,我们有时候需要知道 ORM 对应的 SQL 是什么?那么只需要settings.py文件中,像如下一样设置 LOGGING ,即可实现在Django终端打印SQL语句.LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'loggi原创 2020-05-13 17:02:55 · 841 阅读 · 0 评论 -
Django ORM 的批量创建对象
在开发项目的时候,我们有时候需要批量的创建对象:为了描述问题方便,创建下面的 modelclass SQLExecRecordAgg(models.Model): parent_rule = models.ForeignKey(TransRule) trans_row = models.PositiveIntegerField(default=0, help_text=_('the rows affected')) stats_mins = models.DateTimeField原创 2020-05-13 15:40:41 · 1001 阅读 · 0 评论 -
property、getattr 的用法和Django Model 和 dict 的转换
1. 对于可能需要经常访问的对象属性,可以借鉴下面的 getattr 的用法 class TransRule(models.Model): @property def rule_db(self): if not getattr(self, 'rule_dbinfo', None): print '------get the info from the DB------' database = self.src_tab原创 2020-04-30 16:59:29 · 532 阅读 · 0 评论 -
自定义 DRF 的 filter_class
在项目开发中,我们有时候需要定制过滤类的行为,比如按照时间区间搜索和一些复杂的分组搜索,那么时候有两种解决方案:定制视图类的 get_queryset 方法,可以从 def get_queryset(self): # 过滤方法; GenericAPIView 提供的方法 queryset = models.Goods.objects.all() price_min =...原创 2020-04-02 21:11:56 · 2015 阅读 · 0 评论 -
动态化 DRF 的 search_fields,时而搜索所有列,时而搜索指定列
The SearchFilter class supports simple single query parameter based searching, and is based on the Django admin’s search functionality.When in use, the browsable API will include a SearchFilter contr...翻译 2020-04-01 21:17:20 · 1395 阅读 · 0 评论 -
Django ORM select_related 和 prefetch_related
在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能。以例子来说明,两者的用法:from django.db import models class Province(models.Model): name = models.CharField(max_length=10) de...转载 2020-03-09 20:00:03 · 260 阅读 · 0 评论 -
Django rest framework 序列化类
serializers是什么?官网是这样的”Serializers allow complex data such as querysets and model instances to be converted to native Python datatypes that can then be easily rendered into JSON, XML or other content t...原创 2019-11-06 16:40:00 · 1115 阅读 · 0 评论 -
MySQL 模糊搜索 LIKE BINARY 和 LIKE
MySQL 模糊搜索 LIKE 是否区分大小写,取决于表的 COLLATE,默认是不区分大小写的,如果 COLLATE=utf8_bin 即二进制形式就是区分大小写的。在 ORM 中过滤的时候会写 xxx.objects.filter(name__contains=‘sxn’) 和 xxx.objects.filter(name__icontains=‘sxn’) 转成的 SQL分别是: LIKE BINARY 和 LIKE原创 2020-04-01 18:57:31 · 3981 阅读 · 0 评论 -
Django 和 DRF 中与 auth 相关的内容
后端关于 auth 相关的词有多个: authenticate authentication authenticator前端发送请求的时候需要构造 Authorization 即 HTTP_AUTHORIZATION, 该词是名词有“证书”的意思后端:所有和认证相关的的功能都在 D:…\venv\Lib\site-packages\rest_framework\authentic...原创 2020-03-19 17:29:08 · 227 阅读 · 0 评论 -
datetime 的 isoformat 和 DRF 序列化类的 DateTimeField 的 to_representation 和 auto_now
关于 datetime 的 isoformat ,研究这个的契机是: 工单系统后天改造中发现:该项目中数据库存储的什么值,接口返回的就是什么值,仔细理解这句话(这跟归档项目的行为不一致,归档系统的数据库中存储的是 UTC 时区的时间,但是接口返回的是东八区时间,参数基本一样 TIME_ZONE = 'Asia/Shanghai' USE_TZ = True ,后来发现因为在**归档系统的序列化类里的 DateTimeField 的 to_representation 函数中调用了 enforce_tim原创 2020-03-18 20:44:01 · 888 阅读 · 0 评论 -
Django 重写用户模型
Django 重写用户模型:Django内建的 User 模型可能不适合某些类型的项目。例如,在某些网站上使用邮件地址而不是用户名作为身份的标识可能更合理,或者需要增加 用户的所在部门列。这是我们就需要扩展Django内建的 User 模型编写代码:settings.py # AUTH_USER_MODEL = 'src.apps.workorder.models.MyUser' AU...原创 2020-03-06 19:12:59 · 592 阅读 · 0 评论 -
自定义 JWT 中包含的信息,简直完美!
根据 JWT 到底是个什么串,里面包含了什么信息 的说明 和 一个来自 xdbamp 后端改造项目的灵感:能不能自定义 JWT 中包含的信息答案是肯定的,利用 get_token 把自定义信息加入到 token 的 payload 中Customizing token claims: https://github.com/davesque/django-rest-framework-sim...原创 2020-03-02 17:03:53 · 3054 阅读 · 0 评论 -
JWT 到底是个什么串,里面包含了什么信息
在开始之前先对 JWT 做个简单介绍:from: https://www.jianshu.com/p/164c3ff9033fJWT生成的Token是一个用两个点(.)分割的长字符串;分割成的三部分分别是Header头部,Payload负载,Signature签名 即 Header.Payload.SignatureJWT是不加密的,任何人都可以读的到其中的信息,其中第一部分 Header ...原创 2020-03-02 15:54:53 · 2367 阅读 · 3 评论 -
Django rest framework simple JWT 的源码分析
本文讲述的是 Django rest framework simple JWT 获取 token 的源码流程。我们知道在项目工程中引入 rest_framework_simplejwt 包后,只需要在 url.py 中from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshViewurlpatte...原创 2020-03-02 15:00:10 · 1452 阅读 · 0 评论 -
Django请求生命周期的源码分析:中间件的process_request 、 process_view 、process_response的执行顺序和请求信号的发送
分析一个请求的生命周期以及在该周期中 Django 框架的各个中间件的 process_request 、 process_view 、process_response 是怎么参与的首先浏览器发起请求:当请求到 Django 框架的时候,根据中间件的注册顺序依次执行:根据注册顺序执行所有中间件的 process_request:[process_request, process_req...原创 2020-02-07 17:13:35 · 2074 阅读 · 0 评论 -
MySQL 的事务和事务的隔离级别
mysql数据库,当且仅当引擎是InnoDB,才支持事务。对于一个MYSQL数据库(InnoDB),事务的开启与提交模式无非下面这两种情况:1>若参数autocommit=0,事务则在用户本次对数据进行操作时自动开启,在用户执行commit命令时提交,用户本次对数据库开始进行操作到用户执行commit命令之间的一系列操作为一个完整的事务周期。若不执行commit命令,系统则默认事务回滚。...原创 2020-01-17 20:46:16 · 377 阅读 · 0 评论 -
MySQL 悲观锁
悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在应用层中实现了加锁机制,也无法保证外部系统不会修改数据)。需要注意的是,在事务中,只有SELECT … FOR UPDATE 或LOCK IN SHARE MODE 相同数据时会等待其它事务结束后才执行,一般SELECT … 则不受此影响。拿上面的实例来说,当我执行select stat...原创 2020-01-17 20:12:31 · 496 阅读 · 0 评论 -
Django 的 migrations本质
Djgnao migrations 脚本:项目设计的时候 migrations 脚本和 数据库的表结构是完全对应的通过 SQL 修改数据库表结构,比如 gender —> genderrr在 model 中增加相应的列: 增加 addr 列,执行 makemigrations 和 migrate 命令,发现居然能执行成功;到数据库表执行 show create table xxx ...原创 2020-01-02 17:56:00 · 139 阅读 · 2 评论 -
Django 源码的 authenticate方法到 import_string
Django 的 import_string 是个小工具哈在自定义的 myself_login(reqeust) 视图函数中有调用到user = authenticate(username=username, password=password)经分析 authenticate 源码的过程,发现 import_string 方法还挺精巧def authenticate(**credenti...原创 2019-12-20 17:31:54 · 153 阅读 · 0 评论 -
Django 中的逻辑删除or标记删除or软删除
有时候在开发项目中,对某些数据可能只需要逻辑删除,并不真正的从数据库中删除数据。这时候只需要把继承的 Model 从from django.db import models改为 from model_utils.models import SoftDeletableModel 即可,就这么简单!from model_utils.models import SoftDeletableM...原创 2019-11-26 16:10:53 · 1598 阅读 · 4 评论 -
Django ORM 的 update_or_create
Django ORM 的 update_or_create官网的手写版如下:defaults = {'first_name': 'Bob'}try: obj = Person.objects.get(first_name='John', last_name='Lennon') for key, value in defaults.items(): setatt...原创 2019-11-07 22:42:01 · 947 阅读 · 0 评论 -
用 Django 的 session 验证机制也可以做到前后端的完全分离
用 Django 的 session 验证机制也可以做到,前后端的完全分离。从回答下面的问题,引出咱们的正题。Django 整个认证过程中,从后端到前端, session id是怎么被触发写入cookie 的?后端代码调用 response.set_cookie() 就会在响应头里写 Set-Cookie: sessionid=xxxx;Max-Age=1209600;Path=/ ,浏览器...原创 2019-11-03 17:49:35 · 2555 阅读 · 0 评论 -
Django 和 DRF 的各种 login 汇总
从文章中和 RDS 项目中得到灵感:DjangoRestFramework 也是有自己的登录页面的DjangoRestFramework 的登录页urls.pyfrom rest_framework import routersfrom rest_framework.authtoken import views as drf_auth_viewsurlpatterns = […...原创 2019-10-17 23:17:05 · 1153 阅读 · 0 评论 -
解决 DjangoRestFramework 的 TokenAuthentication Token 没有过期的问题
上篇我们介绍了 DjangoRestFramework 的 TokenAuthentication 方案,同时提到了该方案有个问题是 Token 永远不过期。本文我们就利用继承 DjanoRestFramework 的 TokenAuthentication 重写其中的 authenticate_credentials 方法来实现给 Token 加个有效期。# 自定义的ExpiringToken...原创 2019-10-17 22:42:07 · 1048 阅读 · 0 评论 -
DjangoRestFramework 的 TokenAuthentication
本文主要讲解 DjangoRestFramework 的 TokenAuthentication,我们知道 Django 原生的认证机制是:from django.contrib.auth import authenticate, loginfrom django.contrib.auth.decorators import login_required, permission_require...原创 2019-10-17 22:13:53 · 454 阅读 · 0 评论 -
Django的 auth_permission 的自定义权限
只需要在Model 里的 Meta 类里面增加 permissions,然后执行python manage.py makgemigrationspython manage.py migrate就会在 auth_permission 表中增加实例D:\xxx\djangoTest\robappdj\TestModel\models.pyclass BankContact(models.Mo...原创 2019-10-16 17:50:05 · 3971 阅读 · 0 评论