flask运用
安装Flask
pip install Flask
第一个程序:
from flask import Flask
@app.route('/')
def index():
return '<h2>Hello World!</h2>'
if __name__ == '__main__':
app.run()
2、通过使用变量规则,通过 <variable_name> 就可以在 url 中添加变量
from flask import Flask
app = Flask(__name__)
@app.route('/zhanshan/int:xuehao/')
def index(xuehao):
return '<h2 style=\'color:red\' 我的学号: %d</h2>' %xuehao
if __name__ == '__main__':
app.run()
route规则
写法
<converter:variable_name>
converter类型
string 接收任何没有斜杆(/)的文件(默认)
int 接收整形
float 接收浮点型
path 接收路径,可接收斜线(“/”)
uuid 只接收uuid字符串,唯一码,一种生成规则
any 可以同时指定多种路径,进行限定,和枚举,集合的意思差不多
@blue.route('/')
def hello_world():
return 'Hello Word!'
**
路由匹配规则
#1、: 默认接收的类型是str
2、string:id: 指定接收的类型是str(字符串)
3、int:id: 指定接收的类型是int(整形)
4、float:uid: 指定接收的类型是float(浮点型)
4、path:upath: 指定接收的类型是path(URl中的路径)
@blue.route('/get_id/<id>/')
def get_id(id):
# 匹配str类型的id值
return 'id: %s' % id
@blue.route('/get_int_id/<int:id>/')
def get_int_id(id):
# 匹配int类型的id值
return 'id: %d' % id
@blue.route('/get_float_id/<float:uid>/')
def get_float_id(uid):
# 匹配float类型的uid值
return 'id: %.3f' % uid
@blue.route('/get_path/<path:upath>/')
def get_path(upath):
# 匹配path类型的upath值
return 'path: %s' % upath
methods请求方法
常用的请求类型有如下几种
GET : 获取
POST : 创建
PUT : 修改(全部属性都修改)
DELETE : 删除
PATCH : 修改(修改部分属性)**
Request Response
视图函数返回接收两种类型
Response对象
字符串
针对字符串会会帮我们包装response
返回内容
返回字符串
redener_emplate
添加第二个参数,可以控制返回的状态码
make_response
制作一个响应进行返回
Response
直接创建Response进行返回
其实最终返回的都是response对象
@app.route('/day4/<name>', methods=['GET', 'POST'])
def index(name):
print(request.args.get('password'))
print(request.args['name'])
#print(request.args.getlist('name'))
#url_for('index45', name1='张三')
return name#redirect(url_for('index45', name1='ggtz'))
@app.route('/demo1/<string:name1>')
def index45(name1):
re = url_for('get_uuid')
return redirect(re)
return name1
1.主动终止abort,后面代码不执行
from flask import Flask, json, abort
app=Flask(__name__)
@app.route('/')
def index():
print('age')
abort(404) #请求到此中断,不会打印下面的语句,并返回HTTP状态吗404
print('name')
return 'hello world',666
2.JSON
from flask import Flask, json, abort
app=Flask(__name__)
@app.route('/json1')
def index1():
js = json.jsonify({'name':'value'})
return js
@app.route('/json2')
def index2():
js = json.jsonify(name='value',age=3,xingbie='nan')
return js
@app.route('/json3')
def index3():
js = json.dumps({'name':'svalue','age':18})
return js
if __name__ == '__main__':
app.run(debug=True, port=8888)
知识点:使用jsonify时响应的Content-Type字段值为application/json,
而使用json.dumps时该字段值为text/html
FLASK扩展
安装插件flask-script
命令 pip install flask-script
调整代码
manager = Manager(app)
启动的地方
manager.run()
启动服务器 runserver
python app.py runserver
参数使用
-d 是否开启调试模式
工业上的蓝图纸,代表着希望和前景
flask中用来解决上面文件问题
将请求从主文件中拆分到多个文件中
安装插件
pip install flask-blueprint
初始化蓝图
创建一个类,构造蓝图
blue = Blueprint('blue',__name__)
在app中注册app.register_blueprint(blue)
使用
@blue.route('/rule/')
def hello():
return 'Hello world'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>home</title>
</head>
<body>
<h2>欢迎回来:{{username}}</h2>
<br>
<a href="{{url_for('second_blue.login') }}" >登入</a>
<a href="{{ url_for('second_blue.logout') }}">退出</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="{{ url_for('second_blue.login') }}" method="POST">
<span><input type="text" name="username" placeholder="请输入用户名"/></span>
<br>
<input type="submit" value="登入">
</form>
</body>
</html>
manager
from flask import Flask
from flask_script import Manager
from App.views import blue
from App.view2 import blue as blue2 #可以blue2自己定义,下面同步
app = Flask(__name__)
app.register_blueprint(blueprint=blue)
app.register_blueprint(blueprint=blue2)
manager = Manager(app=app)
if __name__ == '__main__':
manager.run()
第一个视图
from flask import Blueprint, render_template, json
blue = Blueprint('first_blue', __name__)
@blue.route('/day9/')
@blue.route('/')
def hello_world():
name = 'zhangsan' # 字符
dict1 = {'a': 1, 'b': 2, 'c': '3'} # 字典
strs1 = ['AI人工智能-训练机器学习', '智慧校园', '泉舟时代', '智慧水利', '智慧园区', '智慧防汛', '智慧机场', '智慧环保']
return render_template('index.html', dict=dict1, name=name, strs=strs1)
#@blue.route('/url_for/')
def url_for():
result=url_for('first_blue.index')
return result
第二个视图
from flask import Blueprint, url_for, render_template, request, redirect, Response
blue = Blueprint('second_blue', __name__)
@blue.route('/')
def index():
return 'hello Flask'
@blue.route('/url_for/')
def url():
result = url_for('second_blue.index')
# return redirect(result)
return str(result)
@blue.route('/home/')
def home():
username = request.cookies.get('user')
print(username)
return render_template('home.html', username=username)
@blue.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == "GET":
return render_template('Login.html')
elif request.method == "POST":
username = request.form.get('username')
print(username)
response = Response('恭喜你登入成功:%s' % username)
response.set_cookie('user', username)
print(request.cookies.get('user'))
# return redirect(url_for('second_blue.home')) # response
# return response
username = request.cookies.get('user')
print(username)
return render_template('home.html', username=username)
@blue.route('/logout/')
def logout():
rsp = redirect(url_for('second_blue.home'))
rsp.delete_cookie('user')
return rsp
会话技术
●跨越请求传递数据
●web开发中使用的短连接
●cookie
。客户端会话技术
。数据都是存储在浏览器中
。支持过期
。不能跨域名
■frame标签
■可以直接加载整个网站
。不能跨浏览器
。cookie是通过Response来进行操作
。session
●token
用户登入
1.用户中心
2.用户登陆
3.用户退出
新增的
login() 中新增
session['user'] = username
home()中新增
session.get('user')
logout() 新增
session.clear()
●cookie
客户端会话技术
。数据都是存储在浏览器中
。支持过期
。不能跨域名
■frame标签
■可以直接加载整个网站
。不能跨浏览器
。cookie是通过Response来进行操作
。flask中的cookie可以直接支持中文
■flask对cookie中的内容做了编码
●session
●token
安装
pip install flask-session
pip install redis
代码 manager
app.config['SESSION_TYPE'] = 'redis' # session类型为redis
Session(app=app)
redis 安装
http://mrdede.com/?p=2582
base10.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>base10</title>
{% block extCSS %}
{% endblock %}
</head>
<body>
<p>#ctrl+alt+space
#tab</p>
<h1>模板底层</h1>
{% block extheader %}
{% endblock %}
{% block extcontent %}
{% endblock %}
{% block extfoot %}
{% endblock %}
{% block extJS %}
{% endblock %}
</body>
</html>
inde10.html 第一次 extend 调用 封装好的模板
{% extends 'base10.html' %}
{#<link rel="stylesheet" href="/static/css.css">#}
{% block extCSS %}
<link rel="stylesheet" href="{{ url_for('static',filename='css/index10.css') }}">
{% endblock %}
{% block extheader %}
<h1>这是头部</h1>
{% endblock %}
‘第二次调用 mine.html
{% extends 'index10.html' %}
{% block extCSS %}
{{ super() }}
{# {{ block.super() }} django 的语法#}
<link rel="stylesheet" href="{{ url_for('static',filename= 'css/mine10.css') }}">
{% endblock %}
{% block extheader %}
{{ super() }}
<h3>mine人工智能挖坑第二次</h3>
{% endblock %}
{% block extcontent %}
{% include 'content10.html' %}
{% macro hello(name,age) %}
<h2>{{ age }}岁的你{{ name }} :欢迎来到大数据时代下的 宏定义 </h2>
{% endmacro %}
{{ hello('ldy',118) }}
{% from 'mac10.html' import what %}
{{ what('linde') }}
<ul>
{% for hobby in hobbies %}
{% if loop.first %}
<li style="color: red">{{ hobby }} {{ loop.revindex }}</li>
{% elif loop.last %}
<li style="color:green;">{{ hobby|upper }}</li>
{% else %}
<li style="color: blue">{{ hobby }} {{ loop.revindex }}</li>
{% endif %}
{% endfor %}
</ul>
{% endblock %}
{% block extfoot %}
<br>
<div>
<h4>这是底部</h4>
</div>
{% endblock %}
单独写了一个 内容 content10.html
<div>
<link rel="stylesheet" href="{{ url_for('static',filename='css/content.css') }}">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
{% macro hello() %}
<h4>python 的宏定义</h4>
{% endmacro %}
{{ hello() }}
{{ hello() }}
{{ hello() }}
{% macro sayhello(name,age) %}
<h5>欢迎{{ age }}岁的{{ name }}来到大数据物联网时代!</h5>
{% endmacro %}
{{ sayhello('ldy',19) }}
{% from 'mac.html' import what %}
{{ what(22) }}
</div>
技术支持:
泉舟时代集团
http://www.timesqz.com
八、附:
中国数字城市排名
北京、上海、广州、深圳、杭州、贵州、福州、泉州、厦门
智慧城市建设投入排名
上海、北京、深圳、天津、苏州、重庆、杭州、武汉、广州、宁波。
城市信息化程度排名
广州、北京、上海、南京、杭州、武汉、深圳、长沙、苏州、沈阳。
数字经济排名
北京、上海、深圳、广州、天津、杭州、苏州、南京、重庆、成都。
城市应急管理智慧化排名
天津、重庆、武汉、长沙、青岛、合肥、郑州、东营、无锡、南京。
结合AI和5G的智慧城市试点城市
上海、北京、浙江、广东、安徽、山东等省市
首发10大领域、19个场景,涉及“AI工厂”“AI园区”“AI社区”“AI交通”“AI学校”“AI医院”“AI家庭”“AI政务”“AI金融”“AI安防”十大场景