flask之web网关、三件套、配置、路由(参数、转化器及自定义转化器)、cbv、模板语言、session
1.wsgiref.py
from wsgiref.simple_server import make_server
def mya(environ, start_response):
print(environ)
print(start_response)
start_response('200 OK', [('Content-Type', 'text/html')])
if environ.get('PATH_INFO') == '/index':
with open(r'index.html', 'rb') as f:
data = f.read()
elif environ.get('PATH_INFO') == '/login':
with open('login.html', 'rb') as f:
data = f.read()
else:
data = b'<h1>Hello, web!</h1>'
# 返回数据,用列表的方式
return [data]
if __name__ == '__main__':
myserver = make_server('', 8011, mya)
print('监听8011')
myserver.serve_forever()
# http://127.0.0.1:8011/index
2.werzeug.py
from werkzeug.wrappers import Request, Response
@Request.application
def hello(request):
print(request)
return Response('Hello World!')
if __name__ == '__main__':
from werkzeug.serving import run_simple
# run_simple('127.0.0.1', 4000, hello)
run_simple('localhost',4000,hello)
3.三件套
from flask import Flask,render_template,redirect,jsonify,request
app=Flask(__name__)
'''
1 返回字符串
2 返回模板:render_template
3 跳转:redirect
4 json返回
'''
@app.route("/")
def index():
return "ojbk"
@app.route("/index")
def index1():
return render_template("index.html")
@app.route("/home")
def home():
return redirect("/index")
@app.route("/json")
def json1():
data_dic={'name':"jason",'age':38}
return jsonify(data_dic)
if __name__ == '__main__':
app.run()
4.配置文件
from flask import Flask
app = Flask(__name__)
#方式一
# 只能配置下面俩个
# app.debug=True
# app.secret_key="asdjja"
#方式二,以字典的形式
# app.config['DEBUG']=True
#方式三 ,以文件的形式
app.config.from_pyfile("settings.py")
#方式四 ,以类的形式(*****)
# app.config.from_object("settings.test")
@app.route("/")
def index():
return "fdsfk"
if __name__ == '__main__':
app.run()
#settings.py
# DEBUG=True
class comment:
DEBUG = True
class test(comment):
pass
class onlin(comment):
pass
5.路由本质
from flask import Flask
app = Flask(__name__)
# @app.route("/") #@decorator
def index():
return "ok"
app.add_url_rule("/index", view_func=index)
if __name__ == '__main__':
app.run()
6.cbv.py
from flask import Flask,views,url_for
app = Flask(__name__)
#简单模式
# class IndexView(views.View):
# methods = ['GET']
# #给dispatch_request加装饰器
# #decorators = [login, ]
# def dispatch_request(self):
# print('Index')
# return 'Index!'
# def post(self):
# pass
# def get(self):
# pass
#
# app.add_url_rule('/index1', view_func=IndexView.as_view(name='index1')) # name=endpoint
#相当于app.add_url_rule('/index2', view_func=view) view.__name__=index1
#或者,通常用此方式
class IndexView(views.MethodView):
methods = ['GET']
# decorators = [auth, ]
def get(self):
return 'Index.GET'
def post(self):
return 'Index.POST'
app.add_url_rule('/index', view_func=IndexView.as_view(name='index')) # name=endpoint
if __name__ == '__main__':
app.run()
7.路由转化器
from flask import Flask,views,url_for, redirect
app = Flask(__name__)
@app.route("/index/",endpoint='a',methods=["POST","GET"],strict_slashes=True)
def index():
print(url_for('b'))
return redirect(url_for('b'))
@app.route('/inde1/', endpoint='b')
def index():
return 'hahha'
@app.route("/index2")
def index2():
return "吃饭去了"
if __name__ == '__main__':
app.run()
8.自定义转化器
#1 写类,继承BaseConverter
#2 注册:app.url_map.converters['regex'] = RegexConverter
# 3 使用:@app.route('/index/<regex("\d+"):nid>') 正则表达式会当作第二个参数传递到类中
from flask import Flask, views, url_for
from werkzeug.routing import BaseConverter
app = Flask(import_name=__name__)
class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
"""
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex
def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
"""
return int(value)+123
def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
"""
val = super(RegexConverter, self).to_url(value)
return val+"json"
# 添加到flask中
app.url_map.converters['regex'] = RegexConverter
@app.route('/index/<regex("\d+"):nid>')
def index(nid):
print(nid)
print(url_for('index', nid='888'))
return 'Index'
if __name__ == '__main__':
app.run()
9.模板语言
from flask import Flask,render_template,Markup
app = Flask(__name__)
USERS = {
1:{'name':'张三','age':18,'gender':'男','text':"道路千万条"},
2:{'name':'李四','age':28,'gender':'男','text':"安全第一条"},
3:{'name':'王五','age':18,'gender':'女','text':"行车不规范"},
}
def func1(flag):
return Markup(f"<h1>jason dsb ?{flag}</h1>" )
@app.route("/index")
def index():
data=USERS
flag=True
htm="<h1>jason dsb</h1>"
return render_template("index1.html",data=data,flag=flag,name="sb",name1="sb1",htm=htm,func=func1)
if __name__ == '__main__':
app.run()
10.session原理
from flask import Flask,session
app = Flask(__name__)
app.secret_key="sdasjdiashdiah"
app.config["SESSION_COOKIE_NAME"]="jason"
# app.session_interface
@app.route("/")
def index():
session['name']="jason"
return "ok"
@app.route("/index")
def index1():
print(session['name'])
return "123"
if __name__ == '__main__':
app.run()
11.templatess
<!-- detail.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>详细信息 {{info.name}}</h1>
<div>
{{info.text}}
</div>
</body>
</html>
<!--index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table>
{% for k,v in user_dict.items() %}
<tr>
<td>{{k}}</td>
<td>{{v.name}}</td>
<td>{{v['name']}}</td>
<td>{{v.get('name')}}</td>
<td><a href="{{url_for('detail',nid=k)}}">查看详细</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>
<!--index1.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for k,v in data.items() %}
<tr>
<td>{{k}}</td>
<td>{{v.name}}</td>
<td>{{v['name']}}</td>
<td>{{v.get('name')}}</td>
<td><a href="/detail/{{k}}">查看详细</a></td>
</tr>
{% endfor %}
{% if flag %}
{{name}}
{% else %}
{{name1}}
{% endif %}
<br>
{{htm|safe}}
{{func("yes")}}
</body>
</html>
<!--login.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post">
<input type="text" name="user">
<input type="text" name="pwd">
<input type="submit" value="登录">{{error}}
</form>
</body>
</html>
flask之web网关、三件套、配置、路由(参数、转化器及自定义转化器)、cbv、模板语言、session的更多相关文章
- flask 基本操作 模板语言 session
Django web:优点:大而全,ORM models ,model Form ,admin ,csrf ,session缺点:资源浪费 Flask web:优点:小而精,ORM:x , Form: ...
- [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- url路由、模板语言、ajax、用django框架创建表
1.后台管理的左侧菜单,默认只有第一个页签下面的选项是显示的,点了别的页签再显示别的页签下面的选项,问题是:点了任何菜单的选项后,左侧菜单又成了第一个页签的选项显示,别的页签隐藏,也就是左侧的菜单刷新 ...
- python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)
一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...
- flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证
flask路由中的endpoint 与自定义转化器 ''' endpoint主要用于 反向解析, 例如:login函数中配的路由是/login,其中endpoint='lg' 则在其他函数,可以用 u ...
- [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)
oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...
- 1.4WEB API 路由配置及参数传输
在没有添加路由时,webapi 的访问比较恶心,访问的时候是没有接口方法的.如果定义了同样参数的方法,它就傻傻的分不清的,为了解决这个问题,我们加上路由吧. 这是生成的api帮助文档列表,可以看到下面 ...
- flask模板语言,装饰器,路由及配置
1.模板语言jinja2 Flask中默认的模板语言是Jinja2 1.0 模板传参 from flask import Flask,render_template app = Flask(__nam ...
- Linux学习笔记(11)linux网络管理与配置之一——配置路由与默认网关,双网卡绑定(5-6)
Linux学习笔记(11)linux网络管理与配置之一——配置路由与默认网关,双网卡绑定(5-6) 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配置DNS ...
随机推荐
- Java每日一面(Part1:计算机网络)[19/11/13]
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1. HTTP相关[1] 1.1 HTTP简介 HTTP协议,即超文本传输协议,属于应用层的协议,他是基于请求和响应模式的无状态的 应用层协议. ...
- Android PopupWindow增加半透明蒙层
先看效果图: BasePopupWindowWithMask.class package com.example.popupwindowwithmask; import android.content ...
- [20191126]探究等待事件的本源2.txt
[20191126]探究等待事件的本源2.txt --//做一个测试,验证如果写入控制文件慢也会影响提交性能. 1.环境:SCOTT@book> @ ver1PORT_STRING ...
- 阿里云ECS服务器部署HADOOP集群(六):Flume 安装
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop ...
- 解决Android Screen Monitor在android8.0及以上系统报错:"E/Screenshot: Unsupported protocol: 2"
1.打开命令窗口,切换到 asm.jar 所在目录,执行 java -jar asm.jar,正常情况下打开后连接上设备会显示出画面 2.但是在android8.0以上系统该asm.jar包就无法正常 ...
- 外部调用Tomcat启动脚本后日志中文显示乱码问题的解决
外部sh脚本如下 #!/bin/bash while read LINE do echo "Hello $LINE!" case $LINE in all) tail -f -n2 ...
- 《Web Development with Go》Mangodb插入map,slice,Embedded Documents
这几个好理解, 更好的实现,再说. package main import ( "fmt" "log" "time" "gopkg ...
- 12-《Node.js开发指南》-核心模块
全局对象 Node.js中的全局对象是global 所有全局变量(除了global本身以外)都是global对象的属性 最根本的作用为全局变量的宿主 全局变量 //满足以下条件的是全局变量 a.在最外 ...
- 【Linux命令】用户身份(useradd,groupadd,usermod,passwd,userdel)
目录 用户身份 useradd userdel usermod groupadd groupdel passwd chage 用户身份 在linux系统中和windows一样有用户之分.root用户为 ...
- PHP给图片加上图片水印和文字水印实例
下面给大家分享一下PHP给图片加上图片水印和文字水印实例,这也是网站经常用到的功能,把代码加上去,调用就很简单了. 核心代码: function imageWaterMark($groundImage ...