框架思想手动推导

框架基础一

一.手写框架

1.1 纯手写框架

"""
web框架:将前端、数据库整合到一起的基于互联网传输的python代码
	web框架也可以简单的理解为是软件开发架构里面的'服务端'
"""
# 1.搭建简易版本服务端
	socket模块
# 2.遵循HTTP协议
	四大特性、数据格式、响应状态码
# 3.基于不同的后缀响应不同的内容
	如何获取用户输入的url后缀>>>:HTTP请求数据
    /favicon.ico直接忽略 不影响判断
  利用字符串切割和索引取值获取相应数据
import socket


server = socket.socket()
server.bind(('127.0.0.1', 8082))
server.listen(5)


while True:
    sock, addr = server.accept()
    data = sock.recv(1024)
    # 将请求相关数据先转成字符串
    data_str = data.decode('utf8')  # 'GET /login HTTP/1.1\r\nHost: 127.0.0.1:8081\r\n......'
    sock.send(b'HTTP1.1 200 OK\r\n\r\n')
    # 然后去字符串中截取出我们需要的内容(按照空格切割字符串 获取第二个元素即可)
    current_path = data_str.split(' ')[1]
    # 根据后缀的不同返回不同的内容
    if current_path == '/login':
        sock.send(b'hello login!!!')
    elif current_path == '/register':
        sock.send(b'hello register')
    else:
        sock.send(b'404 error') 
"""
上述框架缺陷:
	1.服务端起始代码过于重复
	2.针对HTTP请求数据没有完善的处理方式
	3.并发量问题
"""

1.2 基于wsgiref模块

# 1.利用模块搭建服务端
# 2.利用模块处理好的HTTP字典数据编写业务
	查找用户url后缀对象的键值对数据
from wsgiref import simple_server


def run(request, response):
    """
    :param request: 请求相关的数据
    :param response: 响应相关的数据
    :return: 返回给客户端的展示数据
    """
    # print(request)  # 字典类型的数据(模块自动处理HTTP请求数据 便于后续数据获取)
    response('200 OK', [])  # 固定编写 无需掌握
    current_path = request.get("PATH_INFO")
    if current_path == '/login':
        return [b'hello login html']
    elif current_path == '/register':
        return [b'hello register html']
    return [b'404 error']
if __name__ == '__main__':
    server = simple_server.make_server('127.0.0.1', 8080, run)
    '''一致监听本机8080端口 一旦有请求访问 自动触发run方法的执行'''
    server.serve_forever()

1.3 动静态网页

静态网页
	页面上的数据是直接写死的 万年不变
  	eg:上述项目中编写的 error.html func.html
动态网页
	页面上的数据是通过代码动态获取的 实时可变
  	eg:
      1.页面上展示当前时间(后端获取传递给前端界面)
      2.页面上展示数据库数据(后端链接数据库查询数据再传递给页面)
   
案例1: 页面上展示当前时间
  def get_time(request):
    # 1.获取当前时间
    import time
    c_time = time.strftime('%Y-%m-%d %X')
    # 2.读取html文件
    with open(r'templates/get_time.html','r',encoding='utf8') as f:
        data = f.read()
    # 3.思考:如何给字符串添加一些额外的字符串数据>>>:字符串替换
    new_data = data.replace('asdaksdjal',c_time)
    return new_data
案例2: 将字典传递给页面 并且在页面上 还可以使用字典的操作方法
  jinja2模板语法

1.4 基于janja2模板语法

# 第三方模块
	pip3 install jinja2
# 功能介绍
	在编写前后端不分离项目的时候 可以使用该模块提供的模板语法简单快速的在html页面是使用类似于后端的代码语法操作数据
# 模板语法
  temp_obj.render({'user':user_dict,'new_list':new_list})

	<p>{{ user }}</p>
  <p>{{ user.name }}</p>
  <p>{{ user['pwd'] }}</p>
  <p>{{ user.get('hobby') }}</p>

  {% for i in new_list %}
        <span>元素:{{ i }}</span>
  {% endfor %}
# 获取数据库中的数据展示到前端页面
	还是用的上述模板语法

1.5 文件的专业名词

1.urls.py
	后缀与函数名对应关系
  ('/index',register)
  	后缀专业名词称之为'路由'
    函数名专业名词称之为'视图函数'
    urls.py专业名词称之为'路由层'
2.views.py
	专门编写业务逻辑代码
  	可以是函数 也可以是类
    	函数专业名词称之为'视图函数'
    	类专业名词称之为'视图类'
      views.py专业名词称之为'视图层'
3.templates文件夹
	专门存储html文件
  	html文件专业名词称之为'模板文件'
    templates文件夹专业名词称之为'模板层'

1.6 python主流框架

1.django框架
  比较大,功能比较多,如果对于比较简单的一些功能显得比较笨重
2.flask框架
  小而精,自带功能少,受第三方模块限制
3.tornado框架
  异步非阻塞框架,速度非常快
4.其它小型框架
  fastapi,sanic....

二.django介绍

2.1 django框架简介

1.版本问题
  django3.X 默认提交方式为异步  2022年发布
  django2.X 默认为同步  2020年发布
  django1.X 默认为同步  2018年发布
2.启动可能出现的问题
  计算机名称不能含有中文
  不同版本的解释器可能会与框架不搭
  项目中所有的文件文成最好为英文
  一个pycharm尽量为一个完整的项目
3.下载方式
  pip3 install django==1.11.11

2.2 django基本使用

1.验证是否下载成功
  cmd输入django-admin有反应表示成功
2.操作django的一些命令
  django-admin startproject 项目名 # 创建项目
  cd 项目名称
  python3 manage.py startapp 应用名(app01)
3.pycharm操作django
  new project 
  选择django 填写一些就行  # 创建项目
  点击tools 输入run manage.py task命令自动提示
   '''创建更多的app'''
  直接点击绿色箭头  # 启动
  edit > configurations # 设置端口号

2.3 应用app介绍

1.django本身是一个空壳类似于一所大学
里面的多种不同的app才是功能
eg:
    djanngo项目
      app01
      app02
      app03
      app04

2.4 django主要文件介绍

根目录文件夹
   与文件同名的一个包
    settings.py  # 项目配置文件
    urls.py      # 路由层
    manage.py  # 框架入口文件,很多命令都需要它支持
    db.sqlite3 # 自带的小型数据库 启动才会生成
    templates文件夹 # 模板层
    app01应用文件夹 
    migrations文件夹  # 数据迁移记录
    admin.py    # django后台管理
    app.py # 用于app的注册
    modles.py  # 操作数据库的
    views.py   # 视图层
# 注意
   创建应用层之后一定要配置文件中的注册才能生效
      'app01.apps.App01Config'  完整版
      简写方式:'app01'   

posted on 2022-05-10 23:11  淦白嫖怪  阅读(36)  评论(0)    收藏  举报

导航