首先,我们应该大概知道Django是一种框架,可是框架又是什么呢?
简单来说,框架的本质就是一系列功能的集合体,可以把不同的功能放在不同的文件中,有了框架,可以让我们写项目的整个周期大幅度缩短,效率极大提高,一个成熟合适的框架更是可以实现很多我们无法实现的功能.
那么在介绍Django之前,我们先了解一下其底层原理,或者说其由来.
在之前我们了解过C/S架构和B/S架构,C/S架构就是客户端和服务端之间的交互,而B/S架构则是浏览器和服务端之间的交互,而我们所写的web端,其实就是C/S架构,即服务端和浏览器进行交互,那么浏览器为了理解服务端返回来的消息,就要遵循一种协议,或者说一种数据格式,就是HTTP协议,全程超文本传输协议.
如下:
请求的格式:
\r\n
)要注意这个空格,就是说请求头和下面的请求体之间一定要写这么一个换行的空格,必须要写,否则一定会报错.响应的格式和请求的完全一样,这里不再赘述.
1XX:服务端已经成功接收到你的数据,正在处理,你可以继续提交其他数据
2XX Success(成功状态码):
200 服务端成功响应客户端发来的消息
204 表示服务端接收的请求已经被成功处理,但是在返回的响应报文中不含实体的主体部分
3XX Redirection(重定向状态码):
301 永久性重定向
302 临时性重定向
4XX Client Error(客户端错误状态码)
400 表示请求报文中存在语法错误
401 表示发送的请求需要有通过HTTP认证的认证信息
403 表示对请求资源的访问被服务器拒绝了
404 服务器上无法找到请求的资源,是我们最常见的报错
5XX Server Error(服务器内部错误状态码)
500 表示服务端在执行请求的时候发生了错误
503 表示服务器暂时处于超负载或者正在进行停机维护,无法处理请求
下面我们就用已有的知识来简单实现一个web框架,也就是一个简单的山寨版Django,下面的例程实现了在浏览器访问服务端的时候可以看到请求发送的时间.
# 服务端
import socket
def make_server(ip, port, app): # 代表server
sock = socket.socket()
sock.bind((ip, port))
sock.listen(5)
print('Starting development server at http://%s:%s/' %(ip,port))
while True:
conn, addr = sock.accept()
recv_data = conn.recv(1024) # 接收到的是整个请求报文,是字符串格式
ll=recv_data.decode('utf-8').split('\r\n') # 解码请求头,并以换行符为关键字切割请求头
head_ll=ll[0].split(' ') # 以换行符切割之后取列表的第一位,然后以空格为关键字切割,得到请求首行
environ={}
environ['PATH_INFO']=head_ll[1] # 请求首行分成了两部分,第一个是请求方式,第二个是协议版本
environ['method']=head_ll[0]
res = app(environ)
conn.send(b'HTTP/1.1 200 OK\r\n') # 服务端发送响应报文的时候,这是报文首行
conn.send(b'Content-Type: text/html\r\n\r\n')
conn.send(res)
conn.close()
def app(environ):
# 处理业务逻辑
with open('timer.html', 'r', encoding='utf-8') as f:
data = f.read()
import time
now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
data = data.replace('{{ time }}', now) # 字符串替换
return data.encode('utf-8')
if __name__ == '__main__':
make_server('127.0.0.1', 8008, app) # 在浏览器输入http://127.0.0.1:8008,每次刷新都会看到不同的时间
Python中常用的web框架大概有三种,即Django,Flask以及Tornago,下面简单介绍一下这三者的区别.
1. Django
是Python里面最全能的开发框架,Django的MVT架构,自带ORM,虽然存取速度略慢,但还是给开发者提供了极大的便利,提高开发者的开发效率.
要实在要挑出其缺点,大概也就是整体程序太大,不易移植这么一个缺点了.
2. Flask
小而精,自带的功能特别少,但是其第三方的模块特别多,也就是说其扩展性非常强,如果将flask第三方模块全部加起来,完全可以超过Django,也就是因为比较依赖于第三方模块,如果第三方模块停止更新的话,可能会出现一系列问题
3. Tornado
可以实现高并发,高性能的框架,一句话总结就是异步非阻塞.
上面我们完成了对Django的大致铺垫,下面介绍Django的安装和使用以及一些注意事项.
Django安装非常简单,一句话,打开cmd窗口,输入
pip install django==版本号
关于django 的版本号,市面上用的最多的还是1.XX版本的,不过版本是在一直更新的,所以我们也要于是俱进,具体用哪个版本看个人项目需求,区别不是特别大,可以接受.版本发行时间图如下
安装成功之后,我们可以用这个命令来查看当前安装的Django
django-admin
只要这个命令出来一大串指令,而不是直接报错,就说明你已经安装成功了.
原文:https://www.cnblogs.com/Xu-PR/p/11700595.html