day02 web主流框架
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主流框架的更多相关文章
- tornado 学习笔记2 Python web主流框架
2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Python 四大主流 Web 编程框架
Python 四大主流 Web 编程框架 目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实.但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架 ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
- Web前端三大主流框架是什么?Web前端前景与就业形势
近十年以来,IT行业发展火热,衍生了很多新职业,例如UI设计师.开发工程师.软件测试工程师等等,在众多备受瞩目的新生职业中,Web前端工程师是其中的一员.那么Web前端三大主流框架是什么呢? 一.We ...
- Python Web开发主流框架
Web 开发是Python 语言应用领域的重要部分,也是工作岗位最多的领域.如果你对基于Python的Web 开发有兴趣,正打算使用Python 做Web 开发,或者已经是一个Web 开发者有工作需要 ...
- Web自动化框架搭建——前言
1.web测试功能特性 a.功能逻辑测试(功能测试),这一块所有系统都是一致的,比如数据的添加.删除.修改:功能测试案例设计感兴趣和有时间的话可以另外专题探讨: b.浏览器兼容性测试,更重要的是体验这 ...
- Web开源框架大汇总
Struts 项目简介信息 Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的.由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的 ...
- 国内5款优秀的WEB前端框架
1. JX(腾讯) 官网地址:http://alloyteam.github.io/JX/#home JX 是一个类似 Google Closure Library 的 Web 前端开发框架,服务于 ...
随机推荐
- 从零开始 DIY 智能家居 - 智能开窗器
前言 做完智慧浇水器之后对这种可以节省时间和精力的场景总有一种谜之向往(懒鬼是这样的),这次我准备做一个可以自动开窗的装置,结合之前的甲醛检测传感器就可以实现甲醛含量过高自动开窗通风,之后还可以把燃气 ...
- Atcoder 题目泛做
我思维越来越菜了,这样下去感觉要退役了. 听说Atcoder的题练思维?那就试着做一做吧. 坚持每天一两道吧.(很有可能咕掉.) AGC036 官方题解 ---A-Triangle ...
- 重学STM32---(十)之CAN通信(二)
目录 前言 程序编写 主代码 测试 前言 CAN协议是非常难的,但是在stm32中却是简单的,只需要我们配置寄存器即可,,,即使这样,我在学习的时候也遇到了许多困难 程序编写 1.开时钟,不用说 ...
- windows server 2012 开机运行一段时间死机的故障
环境: 物理机:华为2288 V5 虚拟化:esxi 6.5.2 虚拟操作系统 windwos server 2012 标准版 内安装sql server 和其他应用软件 故障描述:window se ...
- Xtrabackup 全量备份脚本
#!/bin/bash #备份文件的名字为当前主机的IP地址+tar.gz,例如172.16.103.1.tar.gz,且每次备份成功之后都会清空本地的备份目录. #相关目录 mkdir -p /xt ...
- k8s入坑之路(2)kubernetes架构详解
每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平 ...
- Java测试开发--lambda函数式编程(六)
1.Lambda 表达式,是jdk1.8特性,接口里只有一个方法. 举例说明 // ()参数列表 ->连接符 {方法体} 经常在匿名对象 testPerson(()->{System.ou ...
- React + 导入模块的一个错误
导入模块的时候出现这个错误: Attempted import error: 'd3' does not contain a default export (imported as 'd3'). 把导 ...
- 【JAVA】笔记(5)--- final;抽象方法;抽象类;接口;解析继承,关联,与实现;
final: 1.理解:凡是final修饰的东西都具有了不变的特性: 2.修饰对象: 1)final+类--->类无法被继承: 2)final+方法--->方法无法被覆盖: 3)final ...
- 『学了就忘』Linux软件包管理 — 40、Linux系统软件包介绍
目录 1.Linux系统软件包分类 2.源码包说明 3.二进制包说明 4.RPM包的优缺点 4.RPM包的两种安装方法 5.总结 1.Linux系统软件包分类 Linux系统下的软件包只有源码包和二进 ...