falsk 相关 安装运用

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安防”十大场景

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值