Day50

今日总结

Web框架

# 搭建简易版本客户端
	通过soket模块来搭建客户端
# HTTP协议
	四大特性、数据格式、响应状态码
# 基于不同的后缀响应不同的内容
	如何获取用户输入的url后缀>>>:HTTP请求数据
        
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')
   
# 上述框架缺陷
	服务端起始代码过于重复
    	针对HTTP请求数据没有完善的处理方式
    只能满足一个用户(并发量低)

wsgiref模块

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()

动态网页、静态网页

# 静态网页
	页面上的数据是直接写死的	不变
    
# 动态网页
	页面上的数据通过代码动态获取  可变
    
    eg:获取当前时间
        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

jinja2模块

# 安装Jinjia2模块
	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 %}
# 获取数据库中的数据展示到前端页面
	还是用的上述模板语法

框架请求流程

参考群内截图:仅限于我们自己编写的web框架(真正的框架其实跟这个差不多)

urls.py
	后缀与函数名对应关系
  ('/index',register)
  	后缀专业名词称之为'路由'
    函数名专业名词称之为'视图函数'
    urls.py专业名词称之为'路由层'

views.py
	专门编写业务逻辑代码
  	可以是函数 也可以是类
    	函数专业名词称之为'视图函数'
    	类专业名词称之为'视图类'
      views.py专业名词称之为'视图层'

templates文件夹
	专门存储html文件
  	html文件专业名词称之为'模板文件'
    templates文件夹专业名词称之为'模板层'

jinja2模块

# 第三方模块
	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 %}
# 获取数据库中的数据展示到前端页面
	还是用的上述模板语法

框架请求流程

urls.py
	后缀与函数名对应关系
  ('/index',register)
  	后缀专业名词称之为'路由'
    函数名专业名词称之为'视图函数'
    urls.py专业名词称之为'路由层'

views.py
	专门编写业务逻辑代码
  	可以是函数 也可以是类
    	函数专业名词称之为'视图函数'
    	类专业名词称之为'视图类'
      views.py专业名词称之为'视图层'

templates文件夹
	专门存储html文件
  	html文件专业名词称之为'模板文件'
    templates文件夹专业名词称之为'模板层'

python主流web框架

django
	大而全 自带的功能非常的多 但是有时候会略显笨重

flask
	小而精 自带的功能非常的少 但是第三方模块非常的多
  # flask的第三方模块甚至比django还多,但由于过多的依赖于第三方模块 有时候也会受制于第三方模块
  
tornado
	异步非阻塞框架 速度极快 甚至可以用于充当游戏服务器

# 还有一些占比较小  但是也很厉害的框架
	fastapi、sanic......
  
"""
框架的核心逻辑几乎一致 学会时一种,之后就可以触类旁通,但是不要同时学习!
"""

django框架简介

# 版本
	django1.X:默认不支持异步
    django2.X:默认不支持异步
    django3.X:默认支持异步功能
        
# django启动可能报错的原因
	1.计算机名称不能含有中文
    2.不同版本的解释器可能会报错
    	解释器如果是高版本使用django1.11可能会报错
            解释器如果是低版本使用django2、3也可以报错
    3.项目中所有的文件名称最好使用英文
    4.一个pycharm窗口尽量就是一个完整的项目 不要嵌套
    
# 安装
	pip3 install django==1.11.11

django基本使用

# 验证是否下载成功
	cmd窗口直接输入django-admin有反应就是成功了
# 命令操作django
	1.创建django项目
  	django-admin startproject 项目名(mysite)
	2.启动django项目
  	cd 项目名(mysite)
    python3 manage.py runserver IP:PORT
  3.创建app应用
  	python3 manage.py startapp 应用名(app01)
    '''命令行无法自动创建模板文件夹 需要自己执行命令创建'''
# pycharm操作django
	1.new project
  	选择django 填写应用即可
    '''pycharm默认会自动帮你创建模板文件夹 并提供创建一个app的功能'''
  2.创建更多的app
  	tools
    	run manage.py task 命令自动提示
  3.启动项目
  	直接点击绿色箭头 
    	还可以修改端口号 edit configurations

应用app

django本身类似于是一个空壳子 真正的功能是由里面的各个应用决定

django框架相当于是一所大学 应用相当于是大学里面的各个学院
	大学其实是个壳子 负责提供环境 
  学院才是一个个真正具备特定功能的集合

eg:
  使用django写一个淘宝
  	淘宝里面有很多功能模块
    	我们应该先创建一个空的django项目然后根据功能的不同创建不同的应用
      	django项目
        	app01(user)
          app02(order)
          app03(goods)
          app04(backend)

django主要文件介绍

day50_1项目文件名
	day50_1同名文件夹
  	# settings.py		项目配置文件
    # urls.py				路由层
  manage.py
  	django入口文件 很多命令都需要该文件支持
  db.sqlite3
  	django启动之后才会生成的文件 其实就是django自带的小型数据库
  templates文件夹
  	模板层
  app01应用文件夹
  	# migrations文件夹			数据迁移记录(后续讲解)
    # admin.py						django自带的后台管理(后续讲解)
    # apps.py							用于app的注册(后续讲解)
    # models.py						专门用于操作数据库(后续讲解 很重要)
    # views.py						视图层
  
"""
创建应用之后 一定要去配置文件中注册才能生效
	'app01.apps.App01Config'  完整语法
	'app01'										简写语法
"""
posted @ 2022-05-10 23:07  有梦想的阿九  阅读(52)  评论(0)    收藏  举报