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. 第10课 OpenGL 3D世界

    加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...

  2. 开发笔记-----Ajax 基础使用

    一.GET 方式的用法: 1 <!--html --> 2 <div class="layui-form"> 3 <div class="l ...

  3. DeWeb部署

    DeWeb部署 部署时需要runtime中的大部分文件 需要的目录有: apps,仅包括需要部署的dll即可 dist,必须.请勿改动 media,非必须,一般媒体文件存在于此目录 upload,必须 ...

  4. sprint boot 自动创建web应用(3)

    1. springboot自动创建地址:https://start.spring.io/ 2.选择web(springMVC) 3.点击创建 4.创建成功 5.解压,导入项目 6.新建成功 7.原因 ...

  5. 大白话讲解如何解决HttpServletRequest的请求参数只能读取一次的问题

    大家在开发过程中,可能会遇到对请求参数做下处理的场景,比如读取上送的参数中看调用方上送的系统编号是否是白名单里面的(更多的会用request中获取IP地址判断).需要对请求方上送的参数进行大小写转换或 ...

  6. 从0到1使用Kubernetes系列(七):网络

    本文是从 0 到 1 使用 Kubernetes 系列第七篇,上一篇<从 0 到 1 使用 Kubernetes 系列(六):数据持久化实战> 介绍了 Kubernetes 中的几种常用储 ...

  7. asp.net中挺高性能的24种方法

    那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置 ...

  8. CF285D.D. Permutation Sum

    CF285D. Permutation Sum 题目 大意 寻找a,b两个排列从0到n-1,有c[i]=(a[i]+b[i])%n+1,使得c[i]也为全排列的排列方式 思路 a中元素和b中元素的对应 ...

  9. 25.A Famous Music Composer

    描述 Mr. B is a famous music composer. One of his most famous work was his set of preludes. These 24 p ...

  10. ES6—数值(Number,Math对象)(复习+学习)

    ES6-数值(Number,Math对象)(复习+学习) 每天一学,今天要学习ES6的关于数的扩展以及复习,然后通过看书,查阅资料,以及webAPI来搞清楚遇到的,没见过的对象方法等等,下面为本次学习 ...