Django01

一:WEB应用

什么是WEB应用?

用浏览器访问的应用程序

优点:

  • 不需要客户端,只需要一个浏览器
  • 直接在服务端更新,客户端感受不到
  • 耗费用户的硬盘空间少
  • 跨平台性强,直接用浏览器就可以访问

缺点:

  • 强调浏览器的适用性(不同的浏览器,样式不同)
  • 用户的数据都保存在软件厂商那边

二:BS、CS架构

BS:Browser-Server(浏览器-服务端)

CS:Client-Server(客户端-服务端)

BS的本质还是CS

三:手写一个WEB应用

客户端是浏览器,服务端自己写(Python)

演化过程

1.最初的版本 - 客户端与服务端

服务端.py
import socket

s = socket.socket()
s.bind(('127.0.0.1', 8080))
s.listen(5)

conn, addr = s.accept()
data = conn.recv(1024)
conn.send(b'Hello')
print(data.decode('UTF-8'))

conn.close()
s.close()
客户端.py
import socket

client = socket.socket()
client.connect(('127.0.0.1', 8080))

client.send('Hello'.encode('UTF-8'))

data = client.recv(1024)
print(data.decode('UTF-8'))

client.close()

2.浏览器版本1 - 接收浏览器发送的数据

服务端.py
import socket

s = socket.socket()
s.bind(('127.0.0.1', 8080))
s.listen()

conn, addr = s.accept()
data = conn.recv(1024)
conn.send(b'Hello')
print(data.decode('UTF-8'))

conn.close()
s.close()
浏览器 输入IP地址和端口号
127.0.0.1:8080
浏览器发起请求 - 此处可以看出请求里面的所有内容

浏览器的页面 - 无法显示服务器端发来的内容

3.浏览器版本2 - 发送数据到浏览器

服务端.py
import socket

s = socket.socket()
s.bind(('127.0.0.1', 8080))
s.listen(5)
while True:
    conn, addr = s.accept()
    print('=======>', addr)
    data = conn.recv(1024)
    print(data.decode('UTF-8'))

    conn.send('HTTP/1.1 200 OK

Hello'.encode('UTF-8'))	# 按照HTTP协议特定的格式传输数据

    conn.close()

s.close()
HTTP的传输格式
HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
k1:v1
k2:v2
k3:v3

Hello
浏览器页面 - 可以显示服务端发来的内容

4.浏览器版本3 - 发送更多格式的数据到浏览器

服务端.py
import socket

s = socket.socket()
s.bind(('127.0.0.1', 8080))
s.listen(5)
while True:
    conn, addr = s.accept()
    print('=======>', addr)
    data = conn.recv(1024)
    print(data.decode('UTF-8'))

    conn.send('HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8

'.encode('UTF-8'))
    with open('index.html', mode='rb') as f:
        for line in f:
            conn.send(line)

    conn.close()
    
s.close()
index.html - 将要发送的内容放进一个文件中
<h1>Hello World</h1>
<p style="color:rgba(255,104,104,0.7);">你好呀!</p>
浏览器页面 - 可以显示服务端发送的内容,并且可以显示样式

5.浏览器版本4 - 直接打开html文件

将上面的content.txt重命名为content.html,然后直接用浏览器打开

动态页面 和 静态页面

静态页面:

静态的HTML,内容不会改变,每次访问 看到的数据都一样

动态页面:

页面的数据会发生变化,每次访问 看到的可能都不一样(数据来源:数据库)

实现一个动态页面:

# index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>{{time}}</h2>
</body>
</html>
import socket

s = socket.socket()
s.bind(('127.0.0.1', 8080))
s.listen(5)
while True:
    conn, addr = s.accept()
    print('=======>', addr)
    data = conn.recv(1024)
    print(data.decode('UTF-8'))

    import time

    ctime = time.time()  # 可能是数据库里面查询出来的
    with open('index.html', 'r', encoding='UTF-8') as f:
        data = f.read().replace('{{time}}', str(ctime))
    response = 'HTTP/1.1 200 OK 

 %s' % data
    conn.send(response.encode('UTF-8'))

    conn.close()

四:HTTP协议

HTTP:超文本传输协议

详细:http://www.xuexianqi.top/archives/417.html

1.请求协议

三部分:请求首行、请求头、请求体

2.响应协议

三部分:响应首行、响应头、响应体

3.HTTP协议的特性

① 基于TCP/IP协议之上的应用层协议

② 基于:请求 - 响应 模式

③ 无保存状态

4.响应状态码

状态码 释义
1xx 接收到请求,正在处理(用户一般看不到)
2xx 请求成功(200)
3xx 重定向(301 302)访问一个地址,跳转到另一个地址
4xx 客户端出错(404)
5xx 服务端出错(502)

5.URL - 统一资源定位符

① 什么是URI?

URI(Uniform Resource Identifiers),HTTP使用URI来传输数据和建立连接。

② 什么是URL?

URL(Uniform Resource Locator),中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。

URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。

③ URL的组成部分

以下面这个URL为例,介绍下普通URL的各部分组成

http://www.xuexianqi.top:80/archives/286.html?name=root&pwd=123#top1

部分 参数 作用 是否必须
协议 http:// 代表网页使用的是HTTP协议。
在Internet中可以使用多种协议,如HTTP,FTP等等

但是浏览器会自动补全
域名 www.xuexianqi/top 解析到真实的IP地址
也可以直接填写IP地址
端口号 80 跳转到对应的端口号的应用程序
http默认端口为80
https默认端口为442
虚拟目录 archives 虚拟目录部分,一般用于分类
文件名 286.html 读取域虚拟目录下的某一个文件
参数 ?name=root&pwd=123 携带搜索和查询的内容
参数可以用多个&连接
锚点 #top1 用于定位到页面中的某一个部分

五:WEB框架

web框架就是在中的十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率

有一些底层代码,别人已经写好了。我们只需要在这些基础上,继续开发。

  • urls.py - 路由:路径和对应函数的映射关系
  • views.py - 视图函数:一堆函数
  • models.py - 数据库操作相关

六:基于wsgiref写1个WEB框架

  • socket:自己写,借助socket模块,已实现了socket

  • wsgiref:django默认使用的

  • 在web框架上继续开发

    以后路径都去urls.py中写

    路径匹配以后执行的函数,都放在views.py

    数据库相关操作,在models.py中

from wsgiref.simple_server import make_server


def server(environ, start_response):  # 必须传两个参数
    # environ:是字典,http请求拆成字典,请求方式,请求地址,请求头。。。
    # start_response:响应对象,响应状态码,响应头放到里面

    start_response('200 OK', [('Content-Type', 'text/html')])
    if environ.get('PATH_INFO') == '/index':  # 请求地址
        data = 'Index Page'.encode('utf-8')

    elif environ.get('PATH_INFO') == '/login':
        data = 'Login Page'.encode('utf-8')
    else:
        data = b'<h1>Hello Web</h1>'
    return [data]


if __name__ == '__main__':
    # app是可调用对象,可以加括号执行的(函数内存地址)
    myserver = make_server('127.0.0.1', 8081, server)  # 只要客户端发送一次请求,就会调用server()
    myserver.serve_forever()  # 服务就起来了,相当于之前写的socket一直监听8081端口

七:Django介绍

Django框架是PythonWeb三大主流框架之一,以其功能强大全面而受到众多开发者追捧,现如今Django已经更新到3版本,但是并不推荐使用,更多建议使用1版本。

Django版本 Python版本
1.11 2.7、3.4、3.5、3.6、3.7(在1.11.17中添加)
2.0 3.4、3.5、3.6、3.7
2.1 3.5、3.6、3.7
2.2 3.5、3.6、3.7、3.8(在2.2.8中添加)
3.0、3.1 3.6、3.7、3.8

八:Django和其他WEB框架的区别

python中主流web框架:django,flask,tornado(性能高),sanic,fastapi...

WEB框架 Socket 路由关系映射 模板渲染
自制的web框架 第三方wsgiref 自己写 自己写
Django 第三方wsgiref 自己写 自己写
Flask 第三方 自己写 第三方
Tornado 自己写 自己写 自己写

九:Django的安装与简单使用

1.Django的安装

方式1:命令行

在命令行中输入:pip3 install django==版本号(不输入版本号,默认安装最新版3.X)

方式2:PyCharm

PyCharm右下角 - Interpreter Settings - +号 - 搜索:django - 选择版本号 - 点击:Install package

方式3:Terminal

PyCharm下方的Terminal输入:pip3 install django==版本号(不输入版本号,默认安装最新版3.X)

2.安装完毕后,会生成一个:django-admin的命令

该命令在Python解释器的Script文件夹中,该文件夹在安装Python解释器的时候,已经添加到环境变量中了。

3.创建Django项目

方式1:命令行

django-admin startproject 项目名

方式:PyCharm

File - New Project - Django

4.创建app

方式1:命令行

![](https://gitee.com/xuexianqi/img/raw/master/img/image-20200927084102297.png)

方式2:PyCharm

十:需要注意的点

1.如果开了多个django项目,监听的端口可能是同一个,需要修改端口

2.计算机名和路径不要出现中文、空格

3.Django项目中,顶格写的代码,一启动Django项目,该代码就会执行

原文地址:https://www.cnblogs.com/xuexianqi/p/13844843.html