day02 web主流框架

今日内容概要

  • 手写简易版本web框架
  • 借助于wsgiref模块
  • 动静态网页
  • jinja2模板语法
  • 前端、web框架、数据库三种结合
  • Python主流web框架
  • django框架

手写简易版本web框架

# 类型转换
字符串转bytes类型:res =
s = 'meng 今天'
res = bytes(s,'utf8') # 可以转成二进制类型
bytes类型转字符串:
res1 = str(res,'utf8')
print(res1)
'''
问题1:代码冗余
问题2:处理http数据繁杂
''' import socket server = socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5) while True:
conn, addr = server.accept()
data = conn.recv(1024)
data = data.decode('utf8')
target_url = data.split(' ')[1]
conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
if target_url == '/index':
conn.send(b'index')
elif target_url == '/login':
conn.send(b'login')
elif target_url == '/admin':
with open(r'hd.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相关的数据,并组成一个大字典,可以根据key取值。
target_url = request.get('PATH_INFO')
if target_url == '/index':
return [b'index']
elif target_url == '/login':
return [b'login']
elif target_url == '/admin':
return [b'admin']
else:
return [b'404 error'] if __name__ == '__main__':
# 监听127.0.0.1:8000.一旦请求立刻将第三个参数加括号调用
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写对应关系即可'''

views.py:存放核心业务逻辑

def index(request):
with open(r'templates/index.html', 'r', encoding='utf8') as f:
return f.read() def login(request):
return 'login' def admin(request):
return 'admin' def error(request):
return '404 error'

urls.py:存放路径对应关系

from views import *
urls = [
('/index', index),
('/login', login),
('/admin', admin),
]

wsgiref.py:存放代码逻辑

from wsgiref.simple_server import make_server
from urls import urls
from views import error def run(request, response):
response('200 OK', [])
target_url = request.get('PATH_INFO') # 取到'/index'
# 定义一个存储函数名的变量
func = None
for url_tuple in urls: # 相当于取一个个元祖 ('/index',index)
if target_url == url_tuple[0]:
func = url_tuple[1] # 相当于func = index
break # 判断func是否有对应项
if func:
res = func(request)
else:
res = error(request)
return [res.encode('utf8')] if __name__ == '__main__':
# 监听127.0.0.1:8000.一旦请求立刻将第三个参数加括号调用
server = make_server('127.0.0.1', 8080, run)
# 启动服务端
server.serve_forever()

动静态网页

动静态网页
动态网页
数据不是直接写死在html页面上的 而是动态获取(后端)
静态网页
数据是直接写死在页面上的 使用我们自己写的web框架 完成一个动态页面的返回 from datetime import datetime
def time(request):
# 获取当前时间
ctime = datetime.now().strftime('%Y-%m-%d %X')
# 读取httl文件
with open(r'templates/time.html', 'r', encoding='utf8') as f:
re_time = f.read()
# 用替换内置方法来达到让html页面显示当前时间
re_time = re_time.replace('当前时间:', '当前时间:%s' % ctime)
return re_time

jinja2模块

该模块提供了"模板语法"
支持后端给html页面传递数据并且支持后端语法
pip3 install jinja2 # views.py
from jinja2 import Template name = {'username': 'meng', 'age': 18, 'gender': 'male'}
def user(request):
with open(r'templates/user.html', 'r', encoding='utf8') as f:
tom = f.read()
res = Template(tom)
temp = res.render({'user': name})
return temp # user.html
<body>
<h1>{{user}}</h1>
<h1>{{user['username']}}</h1>
<h1>{{user.get('age')}}</h1>
<h1>{{user.gender}}</h1>
<div>
{% for key in user%}
<p>{{user[key]}}</p>
{%endfor%}
</div>
</body>

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是否下载完毕,cmd窗口敲下面命令
django-admin

django基本使用

1、命令行创建Django
1.创建django项目
django-admin startproject 项目名
2.如何运行django项目
切到项目目录下
cd 项目名
python3 manage.py runserver
# 可能会报错 需要删除widgets.py 152行逗号
# 路径:D:\Python39\Lib\site-packages\django\contrib\admin\widgets.py
'%s=%s' % (k, v) for k, v in params.items(), # 删除逗号,不然会报错
3.创建app
python3 manage.py startapp app名字
# 命令行中会少一个配置和templates文件夹,需要自己创建和修改
# 修改配置:E:\student\python student\djanpy\djanpy\settings.py中
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], # 添加 os.path.join(BASE_DIR, 'templates') 配置
"""
命令行创建不会自动创建templates文件夹 并且配置文件中也不会配置
需要自己创建文件夹并配置
os.path.join(BASE_DIR, 'templates')
""" 2、pycharm创建Django
find ----->New project---->django
# pycharm不用修改配置

什么是app

django相当于一所大学(空壳子)
app相当于大学里面的各个学院(功能主题)

day02 web主流框架的更多相关文章

  1. tornado 学习笔记2 Python web主流框架

    2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...

  2. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  3. Python 四大主流 Web 编程框架

    Python 四大主流 Web 编程框架 目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实.但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架 ...

  4. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  5. Web前端三大主流框架是什么?Web前端前景与就业形势

    近十年以来,IT行业发展火热,衍生了很多新职业,例如UI设计师.开发工程师.软件测试工程师等等,在众多备受瞩目的新生职业中,Web前端工程师是其中的一员.那么Web前端三大主流框架是什么呢? 一.We ...

  6. Python Web开发主流框架

    Web 开发是Python 语言应用领域的重要部分,也是工作岗位最多的领域.如果你对基于Python的Web 开发有兴趣,正打算使用Python 做Web 开发,或者已经是一个Web 开发者有工作需要 ...

  7. Web自动化框架搭建——前言

    1.web测试功能特性 a.功能逻辑测试(功能测试),这一块所有系统都是一致的,比如数据的添加.删除.修改:功能测试案例设计感兴趣和有时间的话可以另外专题探讨: b.浏览器兼容性测试,更重要的是体验这 ...

  8. Web开源框架大汇总

    Struts 项目简介信息 Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的.由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的 ...

  9. 国内5款优秀的WEB前端框架

    1. JX(腾讯) 官网地址:http://alloyteam.github.io/JX/#home JX 是一个类似 Google Closure Library 的 Web 前端开发框架,服务于 ...

随机推荐

  1. stat命令的实现

    任务详情 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate.c,提交码云链接 测试代码,mystat 与st ...

  2. Django(73)django-debug-toolbar调试工具

    介绍 Django框架的调试工具栏使用django-debug-toolbar库,是一组可配置的面板,显示有关当前请求/响应的各种调试信息,点击时,显示有关面板内容的更多详细信息. 应用 1. 安装 ...

  3. 开发笔记----- python3 小甜点

    一.字典内容排序 1.根据 值大小排序,默认reverse=False:从小到大排序,True:从大到小排序.例: >>> dic1 = {'a1':4,'b1':12,'c1':1 ...

  4. Linux&C———进程间通信

    管道和有名管道 消息队列 共享内存 信号 套接字 由于进程之间的并不会像线程那样共享地址空间和数据空间,所以进程之间就必须有自己特有的通信方式,这篇博客主要介绍自己了解到的几种进程之间的通信方式,内容 ...

  5. C++ 默认拷贝构造函数 深度拷贝和浅拷贝

    C++类默认拷贝构造函数的弊端 C++类的中有两个特殊的构造函数,(1)无参构造函数,(2)拷贝构造函数.它们的特殊之处在于: (1) 当类中没有定义任何构造函数时,编译器会默认提供一个无参构造函数且 ...

  6. Go语言核心36讲(Go语言进阶技术十六)--学习笔记

    22 | panic函数.recover函数以及defer语句(下) 我在前一篇文章提到过这样一个说法,panic 之中可以包含一个值,用于简要解释引发此 panic 的原因. 如果一个 panic ...

  7. silky微服务业务主机简介

    目录 主机的概念 通用主机 web主机 业务主机类型 使用web主机构建微服务应用 使用通用主机构建微服务应用 构建具有websocket能力的微服务应用 构建网关 开源地址 在线文档 主机的概念 s ...

  8. 动手写一个简单的Web框架(HelloWorld的实现)

    动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...

  9. 问题 F: 背包问题

    题目描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10):如果给你一个背包它能容纳的重量为m(10<=m<=20), ...

  10. React-Router示例(重定向与withRouter)

    1.withRouter作用:把不是通过路由切换过来的组件中,将react-router 的 history.location.match 三个对象传入props对象上   默认情况下必须是经过路由匹 ...