今日内容回顾(django入门)
今日内容回顾
django框架入门
推导流程之手撸web框架
web框架可以简单的理解为是基于互联网的web服务端>>>:socket服务端
-
scoket服务端代码
-
HTTP协议
-
根据网址后缀的不同请求不同的内容
-
请求方式
GET请求:朝服务端索要数据
POST请求:朝服务端提交数据
-
从请求数据格式中筛选出用户输入的网址后缀
t_g = data.decode('utf8').split(" ")[1] -
代码的缺陷
socket代码重复编写造轮子
针对请求数据格式的处理复杂且重复
针对不同网址后缀的匹配方式过于lowB
import socket
server = socket.socket()
server.bind(("127.0.0.1", 8000))
server.listen(5)
while True:
sock, addr = server.accept()
sock.send(b'HTTP/ 1.1 200 OK \r\n\r\n')
data = sock.recv(1024)
t_g = data.decode('utf8').split(" ")[1]
if t_g == '/index':
sock.send(b'I,m index')
else:
sock.send(b'404 ')
推导流程之基于wsgiref模块撸
wsgiref内部封装了 socket代码和请求数据的处理
from wsgiref.simple_server import make_server
def run(request, response):
"""
:param request: 请求数据
:param response: 响应数据
:return: 返回给客户端的数据
"""
print(request) # 自动将请求数据全部处理成字典K:V键值对形式
response("200 OK", []) # 固定代码
return [b"hello my name is wsgiref"] # 返回给客服端的数据,也可以是是Html文件
if __name__ == '__main__':
"""
调用wsgiref中的make_server 里面写入参数 IP地址、端口、方法
任何访问下列IP+端口的请求都会给第三个参数加括号调用
"""
server = make_server("127.0.01", 8080, run)
server.serve_forever() # 永久启动
上述使用wsgiref模块解决了俩个问题
替代了socket代码重复编写造轮子,针对请求数据格式的处理复杂且重复
那么针对不同的网址后缀返回不同的内容,我们可以考虑将其封装成函数
def index(request):
return 'index'
def login(request):
return 'login'
def register(request):
return 'register'
def error(request):
return '404 error'
urls = (
('/index', index),
('/login', login),
('/register', register),
)
然后使用软件开发目录规范将其根据py文件的功能不同划分到不同的py文件
urls.py 存放对应关系
views.py 存放功能函数
start.py 启动文件
templates 存储html文件
推导流程之动静态网页讲解
-
动态网页
动态网页指的是网页上的数据不是全部写死,有些是动态获取的如后端传入
-
静态网页
静态网页指页面上的数据直接写死的,固定不变的,想要改变只能修改源码。
推导流程之jinja2模块
jinja2模块能够让我们在html文件内使用类似于后端的语法来操作各种数据类型
首先jinja2模块属于第三方模块需要下载 pip3 install jinja2
from jinja2 import Template
def get_dict(request):
user_dict = {'name': 'jason', 'pwd': 123, 'hobby': ['read', 'run', 'music']}
with open(r'templates/myhtml04.html','r',encoding='utf8') as f:
data = f.read()
temp = Template(data)
res = temp.render(data=user_dict) # 将字典传递给html页面 页面上通过data即可获取(data仅仅是一个变量名)
return res
模板语法
<h1>{{ data }}</h1>
<h1>{{ data['name'] }}</h1>
<h1>{{ data.get('pwd') }}</h1>
<h1>{{ data.hobby }}</h1>
{% for user in user_data %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.age }}</td>
</tr>
{% endfor %}
python主流web框架
-
django框架
特点:大而全,自身携带的功能非常的多,类似于航空母舰
缺陷:开发小项目的时候使用该框架有点笨重(大材小用)
socket部分用的是别人的 wsgiref模块
路由层与视图层用的是自己的 自己写的
模板语法 用的自己的(虽然没有jinja2好用,但是也很方便)
-
flask框架
特点:小而精 自带的功能非常的少,类似于特种兵
第三方的模块特别多,如果将flask的第三方模块加起来可能胜过django
缺陷:比较依赖第三方模块
socket部分用的是别人的 werkzeug(其内部也是wsgiref模块)
路由层与视图层用的是自己的 自己写的
模板语法 用的别人的 jinja2模块
-
tornado
特点:异步非阻塞 该框架快到可以作为游戏服务器
缺陷:上手难度是三者最高
其socket部分、路由层与视图层、模板语法都是自己写的非常牛掰。
fastapi框架
sanic框架
django框架介绍
-
版本问题
1xx:同步 如1.11
2xx:同步 如2.2
3xx:异步 如3.2
使用什么版本都行,区别不大。
-
启动注意事项
在启动django项目的时候 一定要确保一个端口只有一个项目
计算机名称尽量不要有中文
项目中所有的py文件名尽量不要使用中文
不同版本的python解释器配合不同版本的django会有一些报错
仔细查找一下报错信息里面会提示你是那个py文件里面的代码出错
比如:widgets.py 的152行报错 把152有个逗号删除即可
-
一个pycharm窗口只允许有一个项目,不要做项目的嵌套
-
验证django是否下载成功
cmd终端输入 django-admin
在pycharm里面下载的默认的是c盘可能没有设置环境变量上述是无法直接验证到的
需要添加环境变量。
django基本操作命令
命令行操作
-
创建django项目
选择创建在那个盘中,要先切到那个盘的目录下
如: D:
django-admin startproject 项目名
-
启动django项目
启动时先切到项目目录下,如 cd/项目名,然后输入命令
python38 manage.py runserver IP:port
默认ip+port:http://127.0.0.1:8000 本机
-
访问django服务端,浏览器输入ip:port直接访问即可
-
创建app应用
django框架类似于搭建了一个空壳子,给你提供所需的资源,
至于到底要写哪些功能,需要通过创建app来划分
eg:django初始项目可以看成是一所大学
里面的app文件夹相当于是大学的各个学员
创建app命令行输入:python38 manage.py startapp 应用名
pycharm操作
-
pycharm中找到左上角的file点开,找到new project。

-
点击django,根据下图选择操作即可。

-
启动django项目直接点击pycharm上面的绿色小箭头即可
命令行与pycharm操作的区别
-
命令行不会自动创建templates文件夹
-
命令行不会配置文件编写关于templates文件夹的配置
'DIRS': [os.path.join(BASE_DIR, 'templates')]
-
pycharm自动创建的以一个应用会自动注册到配置文件中
-
针对db.sqlite3文件不用在乎它有没有创建,只要允许了django会自动出来
django目录结构
django项目目录
-
与项目同名的文件夹
__ init __.py 很少使用到,主要存储一些冷门配置
settings.py 存储项目的配置文件
urls.py 存储对应关系,路由层
wsgl.py django服务,基本不用
manage.py django入口文件
templates文件夹 存储项目所需的html文件
-
应用名文件夹(可以有很多)
migrations文件夹 orm相关(数据库打交道的记录)
__ init __.py 很少用,主要做一些冷门配置
admin.py django自带的后台管理
apps.py 创建应用之后用于应用的注册
models.py 存储与数据库表相关的类
tests.py 自带的测试文件
views.py 存储业务相关的逻辑代码(函数、类)
db.sqlite.3 自带的小型数据库
urls.py 路由层
views.py 视图层
templates 模板层
models.py 模型层
django小白入门必会三板斧
HttpResponse(主要用于直接返回字符串类型的数据)
render(主要用于返回html页面,斌且支持模板语法)
redirect(主要用于重定向)

浙公网安备 33010602011771号