Django简介
Python下有许多款不同的Web框架。Python WEB框架通常包含WSGI Server和WEB Framework两个部分。WSGI Server其实就是HTTP Server,它主要实现WSGI协议,用来和WEB Framework对接,使得socket层对请求的处理与Framework层对请求的处理分离开来,这样Framework就不用关心底层的实现。Django是重量级选手中最有代表性的一位。许多网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0。Django的优势如下:
(1)快速web开发
Python web框架。
(2)大量内置应用
例如后台管理系统admin、用户认证系统auth、会话系统sessions等等。
(3)安全性高
提供表单验证、SQL注入、跨站点访问等支持。
(4)易于扩展
引入APP的概念,以APP来扩展WEB项目。
Django内部工作流程
我的理解,上图中Request Middlewares,View Middlewares以及Response Middlewares其实就指的是各个中间件的process_request、process_view以及process_response等等函数。
1.用户通过浏览器请求一个页面的url
2.请求到达Request Middlewares(中间件),中间件对request做一些预处理或者直接response请求
3.URLConf通过urls.py文件和请求的URL找到相应的View(视图)
4.View Middlewares被访问,它同样可以对request做一些处理或者直接返回response
5.调用View中的函数
6.View中的方法可以选择性的通过Models访问底层的数据
7.所有的Model-to-DB的交互都是通过manager完成的
8.如果需要,Views可以使用一个特殊的Context(上下文处理器)
9.Context被传给Template(存放前段文件)用来生成页面
a.Template使用Filters和Tags去渲染输出
b.输出被返回到View
c.HTTPResponse被发送到Response Middlewares
d.任何Response Middlewares都可以丰富response或者返回一个完全不同的response
e.Response返回到浏览器,呈现给用户
Django的安装
Django的安装有pip和源码安装两种方式(本次使用的是Django 1.11.2,Python环境是2.7.13),如下:
(1)pip
直接执行如下命令即可:
1 | pip install Django==1.11.2 |
(2)源码安装
下载pytz 2017.2 版本;下载Django 1.11.2版本。分别解压,然后通过python setup.py install
先安装pytz,再安装Django即可。二者被安装到lib/python2.7/site-packages目录中。
备注:使用python -m django --version
命令查看是否安装成功
创建Django web project
安装完django之后,就拥有django-admin工具命令了,该工具可以用来创建项目、创建APP等等。可以执行执行django-admin help
查看其支持的子命令。
(1)创建Django web项目
执行命令django-admin startproject testproject
命令,创建一个名称为testproject的WEB项目。在当前目录自动生成如下目录结构:
其中各个文件的作用简单说明如下:
manage.py #与项目进行交互的命令工具集,例如启动服务器、数据库操作、Django Shell等等。可以执行python manage.py来查看其支持的子命令。例如python manage.py runserver
wsgi.py #Python应用和WEB服务器的通信协议
urls.py #url路由
settings.py #项目的总配置文件,里面包括了数据库、web应用、时间等各种配置,非常重要
__init__.py #包的__init__.py,说明我们的项目目录是一个python package,可以被import导入
(2)启动web server
执行如下命令即可启动web server:
cd testproject && python manage.py runserver #监听127.0.0.1:8000
cd testproject && python manage.py runserver 8080 #指定监听端口
cd testproject && python manage.py runserver realip:8080 #监听realip:8080
(3)测试
在浏览器中输入http://ip:port
即可访问。效果如下:
在web project中创建app
创建app的过程大致为:
首先执行命令python manage.py startapp testapp
创建一个名称为testapp的应用,然后添加应用名到setting中的INSTALLED_APPS里面,最后是编写app的具体的业务逻辑以及配置url路由等。
备注:Django官网演示的demo是将app目录和manage.py,以及project目录是同级,其实app的目录可以放到任何位置,所有怎么组织一个基于Django项目的目录结构是很灵活的。
自动生成如下的APP目录结构如下:
其中各个文件的作用简单说明如下:
views.py #view.py中定义了很多函数,这些函数是url路由请求的响应函数。每个函数最终返回的是html文件
model.py #定义数据库表,用来做ORM映射的
admin.py #用来给Djanjo内置的admin app来使用,用来做该APP的admin后台相关的操作
tests.py #用来做测试使用的
Django中project和app的区别
Django有project和app两个概念。project的范畴是整个项目工程,包含一些全局配置,这些配置构成一个全局的运行平台。app代表的是project一个相对独立的功能模块,业务逻辑都在各个app中。
关于Django和Tornado的区别
我们知道,Python WEB框架包括WSGI Server和WSGI APP两部分。Django的WSGI Server是基于wsgiref.simple_server而来的。而Tornado的WSGI Server是基于epoll IO复用技术从头实现的,是一套异步应用服务器。因此,从功能上来看,Django有大而全的特点;从处理并发上来看,Tornado支持异步server,有优异的并发处理能力。
wsgiref是Python自带的模块,第三方WSGI Server有werkzeug、gunicorn以及gevent等,如下是wsgiref用法的一个小例子:
1 | from wsgiref.simple_server import make_server |
学习资料参考于:
http://python.jobbole.com/85296/
https://juejin.im/entry/58c613762f301e006bc6d700