(二)Django简介
Django
一:简介
web框架,大大提高web开发效率,web开发本质:request+response,中间的http协议就是browser和server之间谈话的标准,所谓的标准low一点说就是如何断句。
web服务器、应用服务器、web应用框架:
- web服务器:负责处理http请求,响应静态文件,常见的有
Apache
,Nginx
以及微软的IIS
. - 应用服务器:负责处理逻辑的服务器。比如
php
、python
的代码,是不能直接通过nginx
这种web服务器来处理的,只能通过应用服务器来处理,常见的应用服务器有uwsgi
、tomcat
等。 - web应用框架:一般使用某种语言,封装了常用的
web
功能的框架就是web应用框架,flask
、Django
以及Java中的SSH(Structs2+Spring3+Hibernate3)srpingboot,springcloud
框架都是web应用框架。
java的web框架遵循的是MVC,搭建的时候是三个框架简称SSM。
Tornado用的是自己的异步非阻塞“wsgi”,flask则只提供了最精简和基本的框架。Django直接使用WSGI,并实现了大部分Web应用相关的功能。
MVC:一种软件工程典范,用业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
通俗解释:一种代码和文件的组织和管理形式!不要被缩写吓到了,这其实就是把不同类型的文件放到不同的目录下的一种方法,然后取了个高大上的名字。当然,它带来的好处有很多,比如前后端分离,松耦合等等,在使用中你慢慢体会就会逐渐明白它。
模型(model):定义数据库相关的内容,一般放在models.py文件中。
视图(view):定义HTML等静态网页文件相关,也就是那些HTML、css、js等前端的东西。
*控制器(controller):定义业务逻辑相关,就是你的主要代码。
Model(模型和数据库打交道)Template(数据渲染)View(视图,处理请求),里面有一个url分发器,负责将不同的url分发到不同的视图。
分层的目的是为了解耦,当然里面还有很多解耦的机制,来防止硬编码,后面说。
URL组成部分详解:
URL
是Uniform Resource Locator
的简写,统一资源定位符。
一个URL
由以下几部分组成:
scheme://host:port/path/?query-string=xxx#anchor
- scheme:代表的是访问的协议,一般为
http
或者https
以及ftp
等。 - host:主机名,域名,比如
www.baidu.com
。 - port:端口号。当你访问一个网站的时候,浏览器默认使用80端口。
- path:查找路径。比如:
www.jianshu.com/trending/now
,后面的trending/now
就是path
。 - query-string:查询字符串,比如:
www.baidu.com/s?wd=python
,后面的wd=python
就是查询字符串。 - anchor:锚点,后台一般不用管,前端用来做页面定位的。
注意:URL
中的所有字符都是ASCII
字符集,如果出现非ASCII
字符,比如中文,浏览器会进行编码再进行传输。
请求方式分get和post
只要不主动设置都是get请求,a标签网址是get请求,浏览器输入地址栏是get请求
在Django里面path函数的路由字符串,开头都不加/,框架默认给你加了,结尾要加/。
二:Django Demo
project创建后就相当于于一个外壳,常叫做脚手架,里面装入不同的app来协作对外服务。
project里面必须有app,Django创建project后里面会有默认的app,背后帮你做了很多事。
app
是django
项目的组成部分。一个app
代表项目中的一个模块,所有URL
请求的响应都是由app
来处理。比如豆瓣,里面有图书,电影,音乐,同城等许许多多的模块,如果站在django
的角度来看,图书,电影这些模块就是app
,图书,电影这些app
共同组成豆瓣这个项目。因此这里要有一个概念,django
项目由许多app
组成,一个app
可以被用到其他项目,django
也能拥有不同的app
。
2.1创建项目
django-admin startproject djdemo
进入项目cd mydemo
用manage.py管理整个项目,例如添加app,启动项目
2.2创建app(测试可以不添加app)
python manage.py startapp user
2.3启动项目
python manage.py runserver,启动后会提示url+端口,都是默认的本机IP+8000端口启动
如果想要在其他电脑上也能访问本网站,那么需要指定ip
地址为0.0.0.0
。示例为:python manage.py runserver 0.0.0.0:8000
。
三:目录详解
django的思想,同名文件夹里面放项目的宏观设置,里面有urls.py wsgi.py等,db.sqlite3自带的数据库文件,不用就删掉。
django认为项目应该有的文件我都帮你创建好了,至于具体的业务逻辑应该放到app当中,需要你自己创建
python manage.py startapp user,就可以创建app了,就看到了models.py views.py了。
顶级目录djdemo是一个项目文件夹,它的内部有一个和它同名的子文件夹,然后就是下面的:
manage.py
:以后和项目交互基本上都是基于这个文件。一般都是在终端输入python manage.py [子命令]
。可以输入python manage.py help
看下能做什么事情。除非你知道你自己在做什么,一般情况下不应该编辑这个文件。放在项目同名文件夹外面合情合理。settings.py
:本项目的设置项,以后所有和项目相关的配置都是放在这个里面。urls.py
:这个文件是用来配置URL路由的。比如访问http://127.0.0.1/news/
是访问新闻列表页,这些路径和视图函数的映射保存在这个文件中。wsgi.py
:项目与WSGI
协议兼容的web
服务器入口,部署的时候需要用到的,一般情况下也是不需要修改的。
既然说到了wsgi就详细说一下,全称web server gateway interface,是一个协议,就像填写表格的格式,大家都遵守,而wsgiref模块就是它的一个实现类。
它再背后默默的帮你做着复杂枯燥的重复性工作,如何健壮性的将http协议里面的不同字符串截取出来,然后封装到request对象里面,这样每次请求来到之后都会讲数据作为属性封装到对象里面,程序员使用视图函数的时候第一个参数都是request,想用里面的数据就可以直接拿出来,因为很通用,所以就将这段分割http协议的工作抽出来帮我们完成,我们就可以专心从拿到的数据里面根据业务需求完成相关的业务逻辑。
http协议其实就是在描述,我是谁我从哪里来我要干什么,响应就是你要的东西给你,我是发的顺丰快递,好的话给个赞。wsgiref这个实现类的作用是将信息封入对象里面方便使用。
四:规范
1:一个模块一个app,进行功能和模块的分层,和模块相关的urls.py views.py都放入相关的app中。
2:DEBUG默认是开启的,项目上线要改为False,修改了代码,ctrl+s后自动重启不用手动。
二是出现bug报错就会浏览器和控制台显示错误。
改为False之后,必须
3:视图函数第一个参数是request,接收wsgiref传递过来的请求的信息,用就拿不用拉倒,return必须是HttpResponse或它的子类。
五:总结
web项目的本质
socket服务端和浏览器的通信
服务端三个功能:
1-负责和浏览器通信wsgrief
2-根据不同的路径,路由到不同的视图函数
3-将数据库得到的数据或者其他数据渲染到html中要替换的字符串的位置。
Tornado自带三个功能
Django自带2 3,1功能用的其他的三方模块
Flask只有2功能,1,3功能用的都是其他的三方模块
1与2,3通信需要遵守wsgi协议,web server,协议是统一的收发消息格式。