![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Django
文章平均质量分 87
codeLeaves
业余软工狗
展开
-
Django Form源码分析之Field验证逻辑
引言在上一篇对BaseForm的分析中,我只提及了在Form层次的输入验证,在Form.full_clean()主要调用的两个函数self._clean_field(), self._clean_form()。其中,self._clean_field方法代表了Field层次的输入验证。 在Django官方文档中,验证逻辑依次按照如下流程图:Created with Raphaël 2原创 2016-08-06 18:56:35 · 2784 阅读 · 0 评论 -
Django Form 实践总结
在业务开发中,表单验证是较为重要的一环,经过验证后的数据才能存储进数据库。其中,表单验证不仅包括对恶意数据的检测,还包括了对业务逻辑上的一些检测。之前笔者对Django Form的源码进行了一些浅显的分析,经过一段时间的使用以后,积累了一些使用的经验因此写下这篇博客来备忘。关于Django Form源码分析的传送门如下: Django Form源码分析之BaseForm验证逻辑 Django原创 2017-01-25 23:39:02 · 4275 阅读 · 1 评论 -
Django Form源码分析之BaseForm验证逻辑
引言在Django中,Form的主要功能分为输入验证以及在模板中的展示。 首先看一下Form的源码定义:class Form(six.with_metaclass(DeclarativeFieldsMetaclass, BaseForm)): "A collection of Fields, plus their associated data." # This is a sepa原创 2016-08-05 15:58:03 · 2977 阅读 · 0 评论 -
Django类视图与Mixin
在上一篇Django处理http请求流程剖析中,笔者详细地说明了Django框架是如何根据WSGI协议处理一个Http请求的。其中,处理开发者自行定义的View的代码如下:# django.core.handlers.base.py# 路由解析resolver_match = resolver.resolve(request.path_info)callback, callback_args,原创 2016-12-31 23:56:29 · 5861 阅读 · 0 评论 -
Django处理http请求流程剖析
在详细介绍Django处理http请求的各个关键的流程点之前,笔者先简要的提及一下整个流程让各位同学有一个总体的认识。在接受一个Http请求之前的准备 启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器。服务器根据WSGI协议指定相应的Handler来处理Http请求,并且初始化该Handler,在Django框架中由框架原创 2016-12-31 20:56:32 · 5550 阅读 · 0 评论 -
Django时区详解
引言相信使用Django的各位开发者在存储时间的时候经常会遇到这样子的错误:RuntimeWarning: DateTimeField received a naive datetime while time zone support is active. 这个错误到底是什么意思呢?什么是naive datetime object?什么又是aware datetime object?在Django配原创 2016-12-08 09:13:43 · 9987 阅读 · 1 评论 -
Django Signals实践与源码分析
引言Signals是Django提供的一种用于提高代码可读性和复用的一种机制,熟悉的开发者可以把Django提供的Signals机制视为一种发布/订阅模式,一个Signal可以有多个订阅者,当一个Signal发出的时候,所有订阅了该信号的订阅者都会收到该信号并运行。 笔者一开始的时候以为Django Signals是一种异步机制,但在阅读Signals的源码以后发现它是同步机制,并且能保证线程安全原创 2016-11-14 15:07:07 · 1891 阅读 · 0 评论 -
使用Django发送邮件
引言在日常开发中,通过程序来实现对邮箱的操作是一个很常见的应用场景。比如:通过邮件来确认用户注册后台管理人员针对用户的反馈发送邮件通过邮箱来重置用户密码那么,笔者简单介绍一下如何使用Django实现邮件的发送。 PS:笔者在这里推荐一篇掘金的文章是关于邮箱的登录注册的设计细节,其中一些细节考虑的挺好的,在设计的时候可以用来参考。 传送门:干嘛又要邮箱登录啊?—现代登录系统的结构设计准备电原创 2016-10-27 14:25:54 · 5963 阅读 · 0 评论 -
从零开始自动部署Django项目(三):使用uWSGI emperor管理进程
引言在上一篇从零开始自动部署Django项目(二):使用Python编写Git Hooks,笔者直接通过Python模拟正常的人肉linux命令来确定python debug server是否在指定端口运行,如果正在运行则先杀掉该进程,在更新了Git仓库之后再人肉启动python debug server。咦,好像有哪里不对,为什么不直接删掉文件,然后进程不就自动结束了吗?这样子就不用检查端口是否有原创 2016-10-01 23:26:57 · 6182 阅读 · 0 评论 -
从零开始自动部署Django项目(二):使用Python编写Git Hooks
引言在上一篇从零开始自动部署Django项目(一):开发配置与生产配置,已经给出了通过环境变量来实现不同配置选择的解决方案。既然是环境变量,那就可以通过shell脚本或者python脚本来实现。 接下来,我将通过使用python编写的Git Hooks来实现在向生产服务Git推送的时候完成自动部署。 不太了解Git Hooks的同学可以参考我这篇文章: 服务端自动部署静态项目的几种方法。准备首先原创 2016-09-28 15:40:17 · 2798 阅读 · 0 评论 -
django.contrib.auth之authenticate函数源码分析
引言django提供了一个默认的auth系统用于用户的登录和授权,并提供了一定的扩展性,允许开发者自行定义多个验证后台,每个验证后台必须实现authenticate函数,并返回None或者User对象。默认的后台是django.contrib.auth.backends.ModelBackend,该后台通过用户名和密码进行用户的验证,以settings.AUTH_USER_MODEL作为模型。但是在原创 2016-11-04 23:50:15 · 3477 阅读 · 1 评论 -
从零开始自动部署Django项目(四): 在Docker中部署Django项目
引言在前面几篇从零开始自动部署Django项目的系列文章中,主要是解决了本地开发机和远程开发服务器的代码同步问题,但是并没有解决开发环境上的同步问题。前几天,笔者就遇到了“在本地上跑的好好的呀”这样的问题,因此开始研究Docker试着能否解决这个问题。 Attention : 比较尴尬的一点是当前的Docker官网仍然假设在国外,因此如果需要查阅Docker的官方文档请自备梯子。准备什么是Doc原创 2016-10-13 21:58:14 · 20659 阅读 · 2 评论 -
从零开始自动部署Django项目(一):开发配置与生产配置
引言作为一只后端工程师,经常会碰到本地开发环境跟远程服务器生产环境配置不一样的情况,比如说本地数据库使用的是SQLite,而在远程上的数据库用的却是Mysql。 对于一些小的修改,比如数据库的密码不一样之类的,当然可以选择直接SSH登录上服务器然后开VIM修改,但是我觉得这并非一个“懒惰”的工程师的追求。 接下来我将介绍两种方法来部署不同配置的Django。当然,既然是不同的环境,两份配置文件是原创 2016-09-28 11:23:24 · 5060 阅读 · 0 评论 -
Django contenttypes框架详解
什么是Django ContentTypes?Django ContentTypes是由Django框架提供的一个核心功能,它对当前项目中所有基于Django驱动的model提供了更高层次的抽象接口。 然而,对于Django ContentTypes不熟悉的人来说,上面这句话说了跟没说一样,因此,笔者将一步一步解释Django ContentTypes在Django框架中做了什么,以及如何使用Dj原创 2016-11-02 22:50:11 · 8502 阅读 · 2 评论 -
Django Form之动态数据初始化
Form.initial != 动态数据初始化在上一篇对BaseForm的源码分析中,我们已经可以清晰地知道Form.initial并没有对数据初始化,它只是对没有绑定的表单进行展示。 接下来我将提供一个简短的代码片段及示例来描述如何动态初始化,假设有一个QueryForm,有两个参数进行查询,分别是limit和offset,通过这两个参数来控制分页,limit的默认值为10,offset默认为0原创 2016-08-06 23:05:28 · 7910 阅读 · 0 评论 -
django URL模式浅析
准备首先新建一个Django 项目。django-admin startproject urlTest# 进入manage.py所在目录后./manage.py startapp app1./manage.py startpap app2此时我们新建了一个名为urlTest的项目,其中有两个模块的名称分别为app1和app2。(树目录结构如下).├── app1│ ├── __init原创 2016-06-16 10:47:25 · 5980 阅读 · 0 评论 -
Django Form源码分析之Metaclass的应用
引言在上一篇对BaseForm的源码分析中,还有部分的迷惑没有解决。Question:在BaseForm的初始化函数中,可以看到有如下一段代码,究竟self.base_fields从何而来?Form是如何实现Form和Field的结合?# The base_fields class attribute is the *class-wide* definition of# fields. Bec原创 2016-08-09 22:08:07 · 1010 阅读 · 0 评论