Python+flask框架

flask

  • flask基本框架
    • flask知识点
    • 参考资料:

授课:林德尧(泉舟时代-未来城市技术总监)

flask基本框架

 整个hello.py程序脚本就是把前面介绍的三部分合并到个文件中。 程序代码如下示例2-1 hllopy:

一个完整的Flask程序

from flask import Flask
from flask_script import  Manager
from Demoapp.views import bluedemo

app = Flask(__name__)
manager = Manager(app=app)
app.register_blueprint(bluedemo)

if __name__ == '_main__':
    manager.run()
debug是否开启调试模式,开启后修改python的代码会自动重启port启动指定服务器的端口号host主机,默认是127.0.0.1

Tr:要想运行这个程序,请确保激活了你之前创建的虚拟环境,并在其中安装了Flsk现在打开Web别览器,在地址栏中输入h/1/ 00.0000图2-1是浏览精连接到程序后的示意图。

flask知识点

**代码结构**

static静态资源文件
templates模板文件
默认两个都可以直接使用
直接使用相对路径就好模板渲染
render template O
其实也是分为两个过程,加载和道染
静态使用,相当于反向解析
url_ for( 'static filename= mysc.cBs

pintirequesthesi
pinmiequest coo
。pinvequest rensole ada)
#刘览器身份
ptintpequestuse. 3ogen
Tetum需求
类字典的数费构
与字典的区别,可以存在相同的
angsltom都基|mm tetu服橡
mmubeMutiea中数据获取方式
actpunamejiaict gm’unamen
获key对应的所有值
dctgetuvamne
Response
服务器返回会始客户端的数器
由程序员创建,ABRasporo时家
1.真接返同Response对像
2.通过maks, response (aia.codey
code状杰网
3返区文本内容,状志码
4.避回楼板(本质和一样
重定向
readieal)
utor教名数albei

route规则
写法;

converter类型
string
接收任何没有斜杠()的文件(默认)
int接收整型
float
接收浮点型
path
接收路径,可接收斜线(")
uuid
只接受uuid字符串,唯码,-种生成规则
any
可以同时指定多种路径,进行限定I
和枚举,集合的意思差不s
@app.route(any/*)
def any (any)
print(an)

  1. Request
  2. Response
    。视图函数返回接收两种类型

    Response对象

    字符串
    ●针对字符串会帮我们包装成Response
    。返回内容
    返回的字符串

    render_ emplate
    。添加第二个参数,可以控制返回的状态码
    数据正常,返回错误状态码
    make_ response
    制作一个响应进行返回
    Response
    直接创建Response进行返回
    其实最终返回的都是Response对象
    返回JSON
    。 jsonify将数据格式化为json格式,同时设置返回类型为applicatinjson
    ●json.dumps将数据格式化为json格式,没有设返回的数据类型,默认类型早textcml
@app.route(lrequest', Gethods="GET])
def request1():
print(request)
print(type(request))
print(request.method)
print(request.data)
# arguments歌数tget请求参数,
print(request.args)
# post相关请求都会有数据
print(request.form)

ImmutableMultiDict
类似字典的数据结构
与字典的区别,可以存在相同的键
args和form都是ImmutableMultiDict的对象
ImmutableMultiDict中数据获取方式
dict"uname’]或dict.get(‘uname’)
获取指定key对应的所有值
dict.getlistuname’)

Response
服务器返回会给客户端的数据
由程序员创建,返回Response对象
1.直接返回Response对象
2.通过make_ response (data,code)
-data返回的数据内容

  • code状态码
    3.返回文本内容,状态码
    4.返回模板(本质和3-样)
    重定向
    redirect()
    urt for(函数名’,参数=value)
demo1
@app.route("/response)
def resp():
result= render_ template('demo03.htm')
print(result)
print(type(result))
returm'人工智能,403
demo2
response = make_ response('

实践操作

'
, 404) response = Response("啦啦啦德玛西亚,status=606) #跟上面-样 print(response) print(type(response)) return response
@app.route('request", methods=['GET')
def request1():
print(request)
print(type(request)
print(request.method)
print(request.data)
# arguments歌数↑get请求参数,
print(request.args)
# post相关请求都会有数据
print(request.form)
print(request.files)
print(request.cookies)
# print(request.remote_ addr)
#浏览器身份
print(request.user_ agent)
return请求
methods='GET, 'POST; 'DELETE]
@app.routet(/rule" .methods='GET,POST])
def hello():
print(request)#注意导包
pinttype(request))
returm "hellow
methods中指定请求方法
GET
POST
HEAD
PUT
DELETE
url_ for
I反向解析,根据函数名字,获取反向路径
ur_ for(”函数名,,参数名=value)
代码demo1
@app.route('demo1/, methods=['GET, 'POST])
def index3(name):
re = ur_ for('get_ uuid') #反向解析路径
return redirect(re) #重定向跳转

兼容性可能跟虚拟环境-样
安装pip install virtualenv
直看是什么版本: virtualenv -version
激活命令venvScriptsactivate
Imac或者 linux $ source venv/bin/activate
当虚拟环境中的工作完成后,如果你想回到全局Python解释器中,可以在命令行提示符下
输入deactivate
2、终止执行
主动终止abort(code)
捕获异常(后面再讲解)
https://www.cnblogs.com/huchong/archive/2018/06/20/9205651.html

@app errorhandler(404)
I
def hello(e):
retur LOL'
demo1-abort
*在flask中可以通过abort中断触发请求对应的状态码
from flask import abort
Bapp.route('/*) :
def index():
abort(401) * 请求到此即中断,不会打印下面的语句,井返回TTP状态码401
print "123

Json
@app.route(json")
def json 666():
js = json.jsonify({
     name': 'value')
#S = json.jsonify(name='value', age='3)
#s = json.dumps({ name': ' value', ' age': 18))
printjs)
print(type(js))
return js
Flask扩展(今天重点)
命令行参数
安装插件lask script
命令pip install flask _script
调整代码
manager = Manager(app)
启动的地方
manager.un()
参数使用
-d
是否开启调试模式
是否自动重新加载文件
-h, --host指定主机
<!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
 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

<h1>模板底层</h1> { % block extheader %} { % endblock %} { % block extcontent %} { % endblock %} { % block extfoot %} { % endblock %} { % block extJS %} { % endblock %} </body> </html> inde10.html 第一次 extend 调用 封装好的模板 { % extends 'base10.html' %} { ##} { % 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>

##总结

flask能在客户端与服务器较好的桥接,能够在服务器上形成访问链接,创建web页面,呈现在客户端上。

参考资料:

Flask入门及如何反向解析url

产品经理/产品运营精华干货-泉舟时代智库分享

[PRD制作全过程示例-Axure制作PRD]

技术支持:
泉舟时代集团

你可能感兴趣的:(Python+flask框架)