01 Django框架(web框架等前置基础)

01 Django框架

纯手撸简易版本web框架

"""
1.代码过于冗余
2.处理http数据繁杂
"""
import socket


server = socket.socket()
server.bind(('127.0.0.1',8080))  # 端口号尽量使用8000之后的
server.listen(5)


while True:
    conn, addr = server.accept()
    data = conn.recv(1024)
    data = data.decode('utf8')
    print(data)
    target_url = data.split(' ')[1]
    conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
    if target_url == '/index':
        conn.send(b'from index')
    elif target_url == '/login':
        conn.send(b'from login')
    elif target_url == '/func':
        with open(r'myhtml.html','rb') as f:
            for line in f:
                conn.send(line)
    else:
        conn.send(b'404 error')

wsgiref模块

from wsgiref.simple_server import make_server


def run(request, response):
    """
    :param request:跟请求相关的数据
    :param response: 跟响应相关的数据
    :return: 返回值就是要给前端浏览器的数据
    """
    response('200 OK',[])
    # print(request)  # 自动帮我们处理了所有http协议相关的数据并组织成了一个大字典
    target_url = request.get('PATH_INFO')
    if target_url == '/index':
        return [b'from index']
    elif target_url == '/login':
        return [b'from login']
    return [b'hello world']


if __name__ == '__main__':
    # 监听127.0.0.1:8080 一旦有请求 立刻将第三个参数加括号调用
    server = make_server('127.0.0.1', 8080, run)
    # 启动服务端
    server.serve_forever()

变形优化

针对后缀较多的情况 如何更加优化匹配
def register():
    return 'register页面'
urls = [
    ('/index',index),
    ('/login',login),
    ('/reg',register)
]
'''以后新增功能只需要先写一个函数 然后加一组对应关系即可'''

针对同一个py文件内部代码功能繁杂的情况 拆分多个py文件
	views.py		专门用于存放核心业务逻辑
    urls.py			专门用于存放路径对应关系
    templates        专门用于存放html文件
'''以后新增功能只需要views.py写函数 然后urls.py写对应关系即可'''

动静态网页

动静态网页
	动态网页
    	数据不是直接写死在html页面上的 而是动态获取(后端)
    静态网页
    	数据是直接写死在页面上的
 
使用我们自己写的web框架 完成一个动态页面的返回

jinja2模块

该模块提供了"模板语法"
	支持后端给html页面传递数据并且支持后端语法
pip3 install jinja2

<h1>{{user_dict}}</h1>
<h1>{{user_dict['username']}}</h1>
<h1>{{user_dict.get('pwd')}}</h1>
<h1>{{user_dict.hobby}}</h1>

<div>
    {% for key in user_dict%}
        <p>{{ key }}</p>
    {% endfor %}
</div>

课堂练习

将数据库的表数据利用模板语法展示到前端页面

python主流web框架

'''千万不要同时学习多个框架!!!'''
django框架
	大而全 内部自带的组件特别特别多 类似于航空母舰
    有时候可能会过于"笨重"
    
flask框架
	小而精 内部几乎没有什么自带的组件 全部依赖于第三方模块 类似于游骑兵
    如果将flask所有的第三方模块集合到一起甚至可以盖过django
    有时候可能会出现第三方模块无法兼容的情况

tornado框架
	异步非阻塞
    """
    同步异步
    	同步:提交任务之后原地等待任务的返回结果 期间不做任何事
    	异步:提交任务之后不原地等待任务返回结果 有结果会通过回调机制反馈
    阻塞非阻塞
    	阻塞:程序被剥夺了CPU执行权限
    	非阻塞:运行态 就绪态
    """
A:socket部分
B:路由匹配
C:模板语法
    
django
	A:不是自己写的 用的wsgiref模块
    B:自己写的
    C:自己写的
flask
	A:不是自己写的 werkzeug(依赖于wsgiref模块)
    B:自己写的
    C:不是自己写的 jinja2
Tornado
	A,B,C全部都是自己写的

    
知识储备:    
    fastapi框架
        异步框架

django框架

# 1.计算机名称里面最好不要含有中文
# 2.项目名和py文件名尽量也不要使用中文

django版本问题
	django1.X
    django2.X
    django3.X
"""
3.X支持异步(但是目前写的不好)
1.X 2.X 3.X在使用上几乎没有太大差距

针对django版本我们以1.11.11为学习对象

pip3 install django==1.11.11
"""

验证django是否下载完毕
	django-admin

django基本使用

命令行
	1.创建django项目
    	django-admin startproject 项目名
    2.如何运行django项目
    	切到项目目录下
        	cd 项目名
        python3 manage.py runserver
			# 可能会报错 需要删除widgets.py152行逗号
    3.创建app
    	python3 manage.py startapp app名字
    
"""
命令行创建不会自动创建templates文件夹 并且配置文件中也不会配置
需要自己创建文件夹并配置
	os.path.join(BASE_DIR, 'templates')
"""

APP

django相当于一所大学(空壳子)
	app相当于大学里面的各个学院(功能主题)
posted @ 2022-02-28 20:42  Panda_Xin  阅读(124)  评论(0编辑  收藏  举报