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. greenplum分布键的hash值计算分析

    greenplum 数据分布策略 greenplum 是一个 MPP 架构的数据库,由一个 master 和多个 segment 组成(还可选配置一个 standby master),其数据会根据设置 ...

  2. sort-list leetcode C++

    Sort a linked list in O(n log n) time using constant space complexity. C++ /** * Definition for sing ...

  3. Bzoj P2054 疯狂的馒头 | 并查集

    题目链接 思路:因为每次染色都会将某些馒头的颜色彻底更改,所以每个馒头的最终的颜色其实是由最后一次染色决定的,那么我们只考虑最后一次染色即可.对此,我们可以从后往前倒着染色,当目前的染色区间中存在白色 ...

  4. hdu 5171 GTY's birthday gift(数学,矩阵快速幂)

    题意: 开始时集合中有n个数. 现在要进行k次操作. 每次操作:从集合中挑最大的两个数a,b进行相加,得到的数添加进集合中. 以此反复k次. 问最后集合中所有数的和是多少. (2≤n≤100000,1 ...

  5. zabbix 报警发送qq邮件

    1.开启QQ邮箱的IMAP/SMTP服务,获取授权码 获取授权码:点击[开启]按钮,编辑短信发送,即可获得授权码 2.配置 /etc/mail.rc 添加下列配置: [ set from=XXX@qq ...

  6. prometheus(4)之alertmanager报警插件

    报警处理流程如下: 1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过Promethes配置的'scrape_interval'定义的时间间隔,定期采集目 ...

  7. 攻防世界 WEB 高手进阶区 XCTF Web_python_template_injection Writeup

    攻防世界 WEB 高手进阶区 XCTF Web_python_template_injection Writeup 题目介绍 题目考点 SSTI模板注入漏洞 Writeup 知识补充 模板注入:模板引 ...

  8. Vuex状态管理——任意组件间通信

    核心概念 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信. 每一个 Vuex 应用的 ...

  9. SpringBoot中使用@ConfigurationProperties提示:Configuration Annotation Processor not found in classpath

    问题 Springboot1.5以上版本,在使用 @ConfigurationProperties注解的时候会提示Spring Boot Configuration Annotation Proces ...

  10. css 跑马灯加载特效

    css 跑马灯加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=