摘要: web应用与web框架本质# 概念# 什么是web应用程序呢? Web应用程序就一种可以通过互联网来访问资源的应用程序, 用户可以只需要用一个浏览器而不需要安装其他程序就可以访问自己需要的资源. 应用软件通常有两种架构: B/S架构和传统的C/S架构. C/S架构是客户端/服务端程序, 用户需要访问 阅读全文
posted @ 2019-10-20 21:09 suwanbin_thought 阅读(115) 评论(0) 推荐(0) 编辑
摘要: django路由系统# 为了替应用程序设计对应的urls, 我们创建了一个URLConf(url configuration)的模块. URL配置就像一个字典的目录一样, 让我们的应用程序(视图函数)和对应的url(本质是正则表达式)形成映射关系. 以这种方式, 用户访问哪个url, django就 阅读全文
posted @ 2019-10-20 21:08 suwanbin_thought 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 视图层# 视图# 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目 阅读全文
posted @ 2019-10-20 21:06 suwanbin_thought 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 模板层# 模板简介# 每一个Web框架都需要一种很便利的方法用于动态生成HTML页面, 最常见的做法是使用模板。 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分。 简而言之, 模板层就是往HTML文件中填入动态内容的系统, 这部分内容通常可能需要计算,查询数据 阅读全文
posted @ 2019-10-20 21:05 suwanbin_thought 阅读(126) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2019-10-20 21:02 suwanbin_thought 阅读(3) 评论(0) 推荐(0) 编辑
摘要: Django的settings文件部分源码分析# 在编写Django项目的过程中, 其中一个非常强大的功能就是我们可以在settings文件配置许多选项来完成我们预期的功能, 并且这些配置还必须大写, 否则就不会生效. 此外, Django自身还有一套更详细的配置, 那Django是如何做到用户配置 阅读全文
posted @ 2019-10-20 21:01 suwanbin_thought 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 中间件源码分析# 中间件简介# 中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。 但是由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。 中间件是帮助我们在视图函 阅读全文
posted @ 2019-10-20 21:00 suwanbin_thought 阅读(507) 评论(0) 推荐(1) 编辑
摘要: djanao请求生命周期# 浏览器发送请求到服务端 服务端的wsgi服务器接收到来自浏览器的请求, 对request做一些预处理, 把浏览器的请求信息(请求方式, 请求头, socket信息等)都封装在request对象. 中间件相当于Django的门卫, 能够对所有的请求做一个过滤和校验作用, 例 阅读全文
posted @ 2019-10-20 20:59 suwanbin_thought 阅读(105) 评论(0) 推荐(0) 编辑
摘要: Auth模块# Auth模块是Django自带的功能强大的用户认证模块. 在网站的开发中, 用户管理系统的设计也是一个麻烦的问题, 此时我们需要实现包括用户的注册, 登录, 注销, 认证, 密码管理等功能. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证 阅读全文
posted @ 2019-10-20 20:58 suwanbin_thought 阅读(82) 评论(0) 推荐(0) 编辑
摘要: forms组件# 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确... 如果用户输入的内容有错误就需要在页面上相应的位置显示对应 阅读全文
posted @ 2019-10-20 20:57 suwanbin_thought 阅读(91) 评论(0) 推荐(0) 编辑
摘要: Django自带的分页器组件不太好用, 这里选择自定义一个分页器组件. 自定义分页器# Copy class Pagination(object): def __init__(self, current_page, all_count, per_page_num=5, pager_count=11) 阅读全文
posted @ 2019-10-20 20:55 suwanbin_thought 阅读(229) 评论(0) 推荐(0) 编辑
摘要: AJAX简介# AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”. 即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据). AJAX的特点: 异步交 阅读全文
posted @ 2019-10-20 20:54 suwanbin_thought 阅读(392) 评论(0) 推荐(0) 编辑
摘要: 模型层进阶相关# 选择合适的层级工作# 要在对应的level(MVC) 做对应的事. 例如计算 count, 在最低的数据库 level 里是最快的 (如果只需要知道此记录是否存在的话,用 exists() 会更快). 但要 注意: queryset 是 lazy 的,所以有时候在 higher l 阅读全文
posted @ 2019-10-20 20:53 suwanbin_thought 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 多表操作# 多表操作一般会涉及到数据库中常见的3种关系 一对一 OneToOne 多对多 ManyToMany 一对多 ForeignKey 接下来就是对初始的模型的准备 模型表创建# 以图书管理系统为例, 可以很好的展现上面的三种关系. Copy from django.db import mod 阅读全文
posted @ 2019-10-20 20:52 suwanbin_thought 阅读(129) 评论(0) 推荐(0) 编辑
摘要: orm# 在我们常说的MVC模型或MTV模型中, ORM操作就占了很大的比重, 其中的模型(M)就代表的对数据库的操作. 没有ORM, 我们只能通过pymysql等模块操作数据库, 然后再传入原生的sql语句字符串来实现对数据库的增删改查, 而这就导致一个问题, 我们作为程序员, 不是专业的DBA, 阅读全文
posted @ 2019-10-20 20:49 suwanbin_thought 阅读(91) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2019-10-20 20:41 suwanbin_thought 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 上一篇《白话tornado源码之请求来了》介绍了客户端请求在tornado框架中的生命周期,其本质就是利用epoll和socket来获取并处理请求。在上一篇的内容中,我们只是给客户端返回了简单的字符串,如:“Hello World”,而在实际开发中,需要使用html文件的内容作为模板,然后将被处理后 阅读全文
posted @ 2019-10-20 20:39 suwanbin_thought 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 执行字符串表示的函数,并为该函数提供全局变量 本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了。废话不多说,直接上代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!usr/bin/env py 阅读全文
posted @ 2019-10-20 20:37 suwanbin_thought 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 上一篇《白话tornado源码之待请求阶段》中介绍了tornado框架在客户端请求之前所做的准备(下图1、2部分),本质上就是创建了一个socket服务端,并进行了IP和端口的绑定,但是未执行 socket的accept方法,也就是未获取客户端请求信息。 概述 本篇就来详细介绍tornado服务器( 阅读全文
posted @ 2019-10-20 20:35 suwanbin_thought 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 上篇《白话tornado源码之一个脚本引发的血案》用上帝视角多整个框架做了一个概述,同时也看清了web框架的的本质,下面我们从tornado程序的起始来分析其源码。 概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上 阅读全文
posted @ 2019-10-20 20:33 suwanbin_thought 阅读(88) 评论(0) 推荐(0) 编辑