首页 > 编程语言 >第101天-python-flask简介

第101天-python-flask简介

时间:2024-03-08 11:35:23浏览次数:25  
标签:__ name stu python app request flask Flask 101

1.flask

1.1、flask简介

Flask简介:
Flask诞生于2010年,是用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。
其WSGI工具箱采用Werkzeug(路由模块),模板引擎则使用Jinja2。这两个也是Flask框架的核心。
Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。


Flask常用扩展包:
. Flask-SQLalchemy:操作数据库;. Flask-migrate:管理迁移数据库;. Flask-Mail:邮件;
· Flask-WTF:表单;
. Flask-Bable:提供国际化和本地化支持,翻译;. Flask-script:插入脚本;
. Flask-Login:认证用户状态;
. Flask-OpenlD:认证;
. Flask-RESTful:开发RESTAPI的工具;
. Flask-Bootstrap:集成前端Twitter Bootstrap框架;. Flask-Moment:本地化日期和时间;
. Flask-Admin:简单而可扩展的管理接口的框架


框架之间的差别
- Django功能大而全,Flask只包含基本的配置
Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。
Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2模板引擎和Werkzeug wSGl工具集,其他很多功能都是以扩展的形式进行嵌入使用。

Flask 比 Django更灵活
 Flask在 Django之后发布,现阶段有大量的插件和扩展满足不同需要
 Django发布于2005年,Flask创始于2010年年中。
 
 
 
1.启动Flask
from flask import Flask

2.Flask 的Response
    1.HTTPResponse 返回字符串""
    2.render_template渲染返回模板文件
    3.redirect重定向
    #Flask特殊封装
    4.send_file打开返回文件内容Content-Type:文件类型自动识别的文件类型
    5.jsonify返回标准的JSON格式字符串 Content-Type:application/json

3.Flask 的Request
     1.Request导入-请求上下文
     2.Request.method请求方式HTTP 8种 POST DELETE PUT GET OPTIONS请求跨域            3.Request.path url_root路由地址
     4.Request.host获取访问主机地址

    #方法:
    request.form   FormData中的数据to_dict ()直接返回字典数据
    request.args   URL中的数据
    request.data   请求体的原始信息只有在 Content-Type 没有Form b""
    request.json   请求头中的content-Type: application/json字典
    request.headers 请求头中的信息
    request.cookies 请求中Cookie的信息
    
    #坑:
    request.values不可触及的地带

4.Flask 中的session
    from flask import session
    使用session的前提是在application 中加入secret_key
    app.secret_key = "$%^&*($#$号^&*个YH &U"
    
    def get session ():
        session [ "user"]= 123

    交由客户端保管机制
    1.开启Session - session [ "user"]= 123
    2.session序列化字符串
    3.通过secret key进行加密4.通过Cookie―返回客户端
    
    接收session
    1.通过Cookie 获取session
    2.通过secret_key 解密
    3.反序列化字典
    4.session

1.2、flask安装环境

使用拟环境安装Flask,可以避免包的混乱和版本的冲突,虚拟环境是Python解释器的副本,在虚拟环境中你可以安装扩展包,为每个程序单独创建的虚拟环境,可以保证程序只能访问虚拟环境中的包。而不会影响系统中安装的全局Python解释器,从而保证全局解释器的整洁。

虚拟环境使用virtualenv创建,可以查看系统是否安装了virtualenv:
$ virtualenv --version

(m369-1) [[email protected] test]$ pip install virtualenv


1.Flask web框架+Helloworld
pip install Flask - 1.1.1


Flask Flask库文件
Jinja2模板渲染库
MarkupSafe 返回安全标签,只要Flask返回模板或者标签时都会依赖MarkupSafe

Werkzeug德文"工具” uWSGI底昙是wSGI Flask项目启动都是基于werkzeug



#三行启动Flask提供服务
from flask import Flask
app = Flask(__name__)
app.run()

启动flask:
D:\pycharm\Python\Python376\python.exe D:/pycharm/Python/Python376/s1.py
 * Serving Flask app 's1' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [29/Nov/2021 17:40:57] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [29/Nov/2021 17:40:57] "GET /favicon.ico HTTP/1.1" 404 -


if __name__=='__main__':    #当前文件处于脚本状态时运行如下代码
    app.run()

1.2.1、创建flask应用

#三行启动Flask提供服务
from flask import Flask     #导入flask类创建flask应用对象
app = Flask(__name__)       #app = applications
@app.route("/index")        #为flask应用对象增加路由
def index():                #与路由绑定的视图函数视图函数名尽可能保持唯一
    return "helloWorld"
app.run()                   #并启动Rlask应用

1.2.2、flask简介-访问模板template

2.Flask 中的Response

1.HTTPResponse ( "Helloworld")   "HelloWorld"
2.render ( "html文件")    render template ( "HTML文件") #默认存放路径是"templates"

3.redirect ("/home")    redirect ("/home)
# 302   HTTP       status
# 4xx   错误        客户端
#5xx    错误        服务器
ResponseHeaders 中加入了一个Localtion:http://url
#Flask特殊返回值

4.send_file ( "文件路径")      返回文件
#打开并返回文件内容, 自动识别文件类型,在responseheafers中加入
# Content-Type: 文件类型–*文件类型是可以被客户端识别的文件类型
# 不能识别的类型,下载处理 - 浏览器会下载


5.jsonify ("字符串或数据类型")  返回标准格式的JSON字符串
# Content-Type : application/json==标准格式
# Flask 1.1.1
# return d #暂时不建议使用兼容性
# 直接返回dict时本质上在执行jsonify (d
# API 接口 AJAX.post( {username : 123}) {function(data){obj = data}}


#利用Flask 做一个登录username password
#request?

3.Flask 中的Request
methods= [ "GET","POST"]在添加路由的装饰器中允许请求方式,覆盖
1.request.form 获取FormData中的数据 to_dict () ImmutableMultiDict 
2.request.method获取请求方式
3.request.args#获取URL中的数据字符串 get ("key") to_dict ()
4.request.files.get ( "my file")#获取一个 Filestorage Flask文件特殊对象
    my_file = request.files.get("my_file")               #--->主要配置
    new_file = os.path.join("zhgedu", my_file.filename)  #--->主要配置
    my_file.save(new_file)            
#获取数据
5.request.headers
6.request.cookies
7.request.path == request.url_rule
8.request.host == "127.0.0.1:9527"
9.request.host_url == "http://127.0.0.1:9527/"
10.request.json
    #特殊提交方式数据获取
    # Content-Type : application/json
    # request.json获取content-Type:application/json时提交的数据
11.request.data
    # Content-Type无法被识别或不包含Form字眼
    # request.data获取原始请求体中的数据b""


4.Flask中的session
    Session服务器端的键值对
    Cookie 客户端的键值对
    交由客户端保管机制
    
    开启session:
    1.开启Session [username] = 123{
    username : 123
    }
    2.序列化字典==字符串
    3.加密字符串secretkey
    
    接受反序列化session:
    1.从Cookie 中获取到一个叫session Key 的值
eyJ1c2VyIjoiQWxleGFuZGVyLkRTQi5MaSJ9.YaXG4w.oi9dNDpQxwqVt9M9-7lrOQhz5Ys
    2.通过secretKey 解密session
    3.反序列化成字典


5.Jinja2:I
{ {}}引用变量数据执行函数
{%%}逻辑代码



#三行启动Flask提供服务
from flask import Flask
from flask import render_template           #--->主要配置
app = Flask(__name__)


@app.route("/index")
def index():
    return "helloWorld"

@app.route("/home")                          #--->主要配置
def home():                                  #--->主要配置
    return render_template("home.html")      #--->主要配置

app.run()



/templates/home.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bootstrap 101 Template</title>
</head>
<body>
<h1> 你好, 世界!</h1>
</body>
</html>

1.2.3、redirect跳转

Python/s2.py
-------------
from flask import Flask
from flask import render_template
from flask import redirect     #--->redirect重定向     #--->主要配置
app = Flask(__name__)


@app.route("/index")
def index():
    return "helloWorld"

@app.route("/home")
def home():
    return render_template("home.html")

@app.route("/re")                       #--->主要配置
def re():                               #--->主要配置
    return redirect("/home")            #--->主要配置


app.run()


http://127.0.0.1:5000/re    #---->跳转 
302     跳转

1.2.4、send_file发送文本

#三行启动Flask提供服务
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect     #--->redirect重定向
app = Flask(__name__)


@app.route("/index")
def index():
    return "helloWorld"

@app.route("/home")
def home():
    return render_template("home.html")

@app.route("/re")
def re():
    return redirect("/home")

@app.route("/get_file")
def get_file():
    return send_file("s1.py")                                   #--->主要配置
 

app.run()

1.2.4.1、send发送图片


from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect     #--->redirect重定向
app = Flask(__name__)


@app.route("/index")
def index():
    return "helloWorld"

@app.route("/home")
def home():
    return render_template("home.html")

@app.route("/re")
def re():
    return redirect("/home")

@app.route("/get_file")
def get_file():
    return send_file("1.jpg")         #--->主要配置
    


app.run()

1.2.4.2、send发送视频

#三行启动Flask提供服务
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect     #--->redirect重定向
app = Flask(__name__)


@app.route("/index")
def index():
    return "helloWorld"

@app.route("/home")
def home():
    return render_template("home.html")

@app.route("/re")
def re():
    return redirect("/home")

@app.route("/get_file")
def get_file():
    #return send_file("1.jpg")
    return send_file("2.mp4")        #--->主要配置


app.run()

1.2.4.3、send下载程序

from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect     #--->redirect重定向
app = Flask(__name__)


@app.route("/index")
def index():
    return "helloWorld"

@app.route("/home")
def home():
    return render_template("home.html")

@app.route("/re")
def re():
    return redirect("/home")

@app.route("/get_file")
def get_file():
    return send_file("1.exe")
    # return send_file("s1.py")
    # return send_file("1.jpg")
    # return send_file("2.mp4")

1.2.5、jsonify格式

Python/s2.py
-------------
#三行启动Flask提供服务
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect     #--->redirect重定向
from flask import jsonify      #--->主要配置
app = Flask(__name__)


@app.route("/index")
def index():
    return "helloWorld"

@app.route("/home")
def home():
    return render_template("home.html")

@app.route("/re")
def re():
    return redirect("/home")

@app.route("/get_file")
def get_file():
    # return send_file("1.exe")
    # return send_file("s1.py")
    return send_file("1.jpg")
    # return send_file("2.mp4")

@app.route("/get_json")                  #--->主要配置
def get_json():                          #--->主要配置
    d = {                                #--->主要配置
        "name":"Alexander.DSB.li"        #--->主要配置
    }                                    #--->主要配置
    return jsonify(d)                    #--->主要配置
    #return d       #--->不建议使用

1.2.5.1修改文件类型

#三行启动Flask提供服务
from flask import Flask
from flask import render_template
from flask import send_file
from flask import redirect     #--->redirect重定向
from flask import jsonify
app = Flask(__name__)
#app.default_config
app.config["JSONIFY_MIMETYPE"] = "application/DragonFire"   #--->主要配置

@app.route("/index")
def index():
    return "helloWorld"

@app.route("/home")
def home():
    return render_template("home.html")

@app.route("/re")
def re():
    return redirect("/home")

@app.route("/get_file")
def get_file():
    # return send_file("1.exe")
    # return send_file("s1.py")
    return send_file("1.jpg")
    # return send_file("2.mp4")

@app.route("/get_json")
def get_json():
    d = {
        "name":"Alexander.DSB.li"
    }
    return d
    # return jsonify(d)

1.2.6、Flask 做一个登录username password

from flask import Flask ,render_template, request
app = Flask(__name__)   #__name__文件名
app.debug = True  #开启debug模式,再改动代码会自动重启


@app.route("/login", methods=["GET","POST"])   #405请求方式不被允许
def login():
    # 从request中取出请求方式
    print(request.method)
    #判断请求方式 GET render POST处理
    if request.method == "GET":
        return render_template("login.html")
    if request.method == "POST":
        #在Django request.POST取出FoxmData(Form表单)
        # 在Flask获取FormData request.forn
        print(request.form.get("username"))
        print(request.form.to_dict())

        return "200 ok"




if __name__ == '__main__':
    app.run('0.0.0.0',9527)
    
    
192.168.1.103 - - [30/Nov/2021 01:03:54] "POST /login HTTP/1.1" 200 -
POST
123
{'username': '123'}

1.2.6.1、request.url编排方式

1.request.form 获取FormData中的数据 to_dict () ImmutableMultiDict 
2.request.method获取请求方式
3.request.args#获取URL中的数据字符串 get ("key") to_dict ()



from flask import Flask ,render_template, request
app = Flask(__name__)   #__name__文件名
app.debug = True  #开启debug模式,再改动代码会自动重启


@app.route("/login", methods=["GET","POST"])   #405请求方式不被允许
def login():
    # 从request中取出请求方式
    print(request.method)
    #判断请求方式 GET render POST处理
    if request.method == "GET":
        # 在Django request.GET取出URL中的参数
        # #在Flask获取URL中的参数
        print(request.url)          #--->请求地址            #--->主要配置
        print(request.values)   #接受所有(get post)请求中的数据 #--->主要配置
        print(request.url_charset)  #URL编码方式             #--->主要配置
        print(request.url_root)     #请求地址完整请求地址host #--->主要配置
        print(request.url_rule)     #请求路由地址


        print(request.args.to_dict())      #---> {'id': '1'}
        print(request.args.get("id"))      #-->获取   URL中的数据为 1
         
        return render_template("login.html")
    if request.method == "POST":
        #在Django request.POST取出FoxmData(Form表单)
        # 在Flask获取FormData request.forn
        print(request.form.get("username"))
        print(request.form.to_dict())

        return "200 ok"




if __name__ == '__main__':
    app.run('0.0.0.0',9527)
    
    
执行结果:   
GET
http://10.8.65.183:9527/login?id=1
CombinedMultiDict([ImmutableMultiDict([('id', '1')])])
utf-8
http://10.8.65.183:9527/
/login
{'id': '1'}
1.2.6.2、提交文件1
from flask import Flask ,render_template, request
app = Flask(__name__)   #__name__文件名
app.debug = True  #开启debug模式,再改动代码会自动重启


@app.route("/login", methods=["GET","POST"])   #405请求方式不被允许
def login():
    # 从request中取出请求方式
    print(request.method)
    #判断请求方式 GET render POST处理
    if request.method == "GET":
        # 在Django request.GET取出URL中的参数
        # #在Flask获取URL中的参数
        print(request.url)           #--->请求地址
        print(request.values)        #接受所有(get post)请求中的数据
        print(request.url_charset)   #URL编码方式
        print(request.url_root)      #请求地址完整请求地址host
        print(request.url_rule)      #请求路由地址
        #print(request.values.to_dict())

        # print(request.args.to_dict())  #获得一个字典
        # print(request.args.get("id"))  #-->获取   URL中的数据




        return render_template("login.html")
    if request.method == "POST":
        #在Django request.POST取出FoxmData(Form表单)
        # 在Flask获取FormData request.forn
        # print(request.form.get("username"))
        # print(request.form.to_dict())
        # 在Django request.GET取出URL中的参数
        # 在Flask 获取URL中的参数

        print(request.files)  # 提交文件      #--->主要配置 ,必须在post中
        print(request.files.get("my_file"))
        return "200 ok"

    
    
/templates/login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1> 用户登录</h1>
<form action=""  method="post" enctype="multipart/form-data">     \\提交方式  #multipart/form-data多功能                                        #--->主要配置
    <p>username: <input type="text" name="username"></p>
    <p><input type="file" name="my_file"></p>         \\提交文件  #--->主要配置
    <input type="submit" value="登录">
<form>
</body>
</html>



执行结果:
POST
10.8.65.183 - - [30/Nov/2021 10:36:06] "POST /login?id=1 HTTP/1.1" 200 -
ImmutableMultiDict([('my_file', <FileStorage: '1.jpg' ('image/jpeg')>)])
<FileStorage: '1.jpg' ('image/jpeg')>

1.2.6.3、指定目录上载文件

from flask import Flask ,render_template,request
import os                                          #--->主要配置
app = Flask(__name__)   #__name__文件名
app.debug = True  #开启debug模式,再改动代码会自动重启


@app.route("/login", methods=["GET","POST"])   #405请求方式不被允许
def login():
    # 从request中取出请求方式
    print(request.method)
    #判断请求方式 GET render POST处理
    if request.method == "GET":
        # 在Django request.GET取出URL中的参数
        # #在Flask获取URL中的参数
        print(request.url)           #--->请求地址
        print(request.values)        #接受所有(get post)请求中的数据
        print(request.url_charset)   #URL编码方式
        print(request.url_root)      #请求地址完整请求地址host
        print(request.url_rule)      #请求路由地址
        #print(request.values.to_dict())

        # print(request.args.to_dict())  #获得一个字典
        # print(request.args.get("id"))  #-->获取   URL中的数据


        return render_template("login.html")
    if request.method == "POST":
        #在Django request.POST取出FoxmData(Form表单)
        # 在Flask获取FormData request.forn
        # print(request.form.get("username"))
        # print(request.form.to_dict())
        # 在Django request.GET取出URL中的参数
        # 在Flask 获取URL中的参数

        print(request.files)  # 提交文件                      #--->主要配置
        print(request.files.get("my_file"))                  #--->主要配置
        # 获取一个FileStorage Flask文件特殊对象
        my_file = request.files.get("my_file")               #--->主要配置
        new_file = os.path.join("zhgedu", my_file.filename)  #--->主要配置
        #my_file.save("zhgedu.jpg")               #保存图片
        my_file.save(new_file)                               #--->主要配置

        return "200 ok"


if __name__ == '__main__':
    app.run('0.0.0.0',9527)

1.2.6.4、登录实现跳转

from flask import Flask ,render_template,request,session
from flask import redirect                              #--->主要配置
import os
app = Flask(__name__)   #__name__文件名
app.debug = True  #开启debug模式,再改动代码会自动重启


@app.route("/login", methods=["GET","POST"])   #405请求方式不被允许
def login():
    # 从request中取出请求方式
    print(request.method)
    #判断请求方式 GET render POST处理
    if request.method == "GET":
        # 在Django request.GET取出URL中的参数
        # #在Flask获取URL中的参数
        # print(request.url)           #--->请求地址
        # print(request.values)        #接受所有(get post)请求中的数据
        # print(request.url_charset)   #URL编码方式
        # print(request.url_root)      #请求地址完整请求地址host
        # print(request.url_rule)      #请求路由地址
        #print(request.values.to_dict())

        # print(request.args.to_dict())  #获得一个字典
        # print(request.args.get("id"))  #-->获取   URL中的数据




        return render_template("login.html")
    if request.method == "POST":
        #在Django request.POST取出FoxmData(Form表单)
        # 在Flask获取FormData request.forn
        # print(request.form.get("username"))
        # print(request.form.to_dict())
        # 在Django request.GET取出URL中的参数
        # 在Flask 获取URL中的参数

        # print(request.files)  # 提交文件
        # print(request.files.get("my_file"))
        # 获取一个FileStorage Flask文件特殊对象
        # my_file = request.files.get("my_file")
        # new_file = os.path.join("zhgedu", my_file.filename)
        # my_file.save(new_file)
        #my_file.save("zhgedu.jpg")               #保存图片

        #获取数据
        # request.headers
        # request.cookies
        # request.path == request.url_rule
        # request.host == "127.0.0.1:9527"
        # request.host_url == "http://127.0.0.1:9527/"


        #特殊提交方式数据获取
        #content-type: application/json
        # request. json获取Content-Type : application/json时提交的数据
        # Content-Type无法被识别或不包含Form字眼
        # request.data获取原始请求体中的数据b""
        if request.form.get("username") == "123":                #--->主要配置
            return  redirect("/")      #跳转                     #--->主要配置

@app.route("/")                                                 #--->主要配置
def index():                                                    #--->主要配置
    return  render_template("index.html")                       #--->主要配置
    
    
/templates/index.html  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Bootstrap 101 Template</title>
</head>
<body>
<h1> 你好, 世界!zhgedu</h1>
</body>
</html>

1.2.7、session登录需要密码

Python/s2.py
-------------
from flask import Flask ,render_template,request
from flask import redirect
from flask import session                                    #--->主要配置
import os
app = Flask(__name__)   #__name__文件名
app.secret_key = "123456"                                    #--->主要配置
app.debug = True  #开启debug模式,再改动代码会自动重启


@app.route("/login", methods=["GET","POST"])   #405请求方式不被允许
def login():
    # 从request中取出请求方式
    print(request.method)
    #判断请求方式 GET render POST处理
    if request.method == "GET":
        # 在Django request.GET取出URL中的参数
        # #在Flask获取URL中的参数
        # print(request.url)           #--->请求地址
        # print(request.values)        #接受所有(get post)请求中的数据
        # print(request.url_charset)   #URL编码方式
        # print(request.url_root)      #请求地址完整请求地址host
        # print(request.url_rule)      #请求路由地址
        #print(request.values.to_dict())

        # print(request.args.to_dict())  #获得一个字典
        # print(request.args.get("id"))  #-->获取   URL中的数据




        return render_template("login.html")
    if request.method == "POST":
        #在Django request.POST取出FoxmData(Form表单)
        # 在Flask获取FormData request.forn
        # print(request.form.get("username"))
        # print(request.form.to_dict())
        # 在Django request.GET取出URL中的参数
        # 在Flask 获取URL中的参数

        # print(request.files)  # 提交文件
        # print(request.files.get("my_file"))
        # 获取一个FileStorage Flask文件特殊对象
        # my_file = request.files.get("my_file")
        # new_file = os.path.join("zhgedu", my_file.filename)
        # my_file.save(new_file)
        #my_file.save("zhgedu.jpg")               #保存图片

        #获取数据
        # request.headers
        # request.cookies
        # request.path == request.url_rule
        # request.host == "127.0.0.1:9527"
        # request.host_url == "http://127.0.0.1:9527/"


        #特殊提交方式数据获取
        #content-type: application/json
        # request. json获取Content-Type : application/json时提交的数据
        # Content-Type无法被识别或不包含Form字眼
        # request.data获取原始请求体中的数据b""
        if request.form.get("username") == "Alexander.DSB.Li":  #--->主要配置
            session["user"] = request.form.get("username")      #--->主要配置
            return  redirect("/")      #跳转

@app.route("/")
def index():
    print(session.get("user"))                                  #--->主要配置
    return  render_template("index.html")

if __name__ == '__main__':
    app.run('0.0.0.0',9527)

1.2.8、{{传参}}

Python/s3.py
-------------
from flask import Flask ,render_template

app = Flask(__name__)   #__name__文件名
app.debug = True


STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'}        #--->主要配置

STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
]

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 38, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}

#1.查看STUDENT放在studentinfo页面

@app.route("/stu")                                              #--->主要配置
def stu():
    return  render_template("stuinfo.html", stu_info = STUDENT) #--->主要配置

if __name__ == '__main__':
    app.run('0.0.0.0',9528)
    
    

/template/stuinfo.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
{{ stu_info }}                                                #--->主要配置
</body>
</html>

1.2.8.1、stu_info.未知(传参创表)

Python/s3.py
-------------
from flask import Flask ,render_template      #--->主要配置

app = Flask(__name__)   #__name__文件名
app.debug = True


STUDENT = {'name': 'zhgedu', 'age': 26, 'gender': 'man'}    #--->主要配置

STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
]

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 38, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}

#1.查看STUDENT放在studentinfo页面

@app.route("/stu")
def stu():
    return  render_template("stuinfo.html", stu_info = STUDENT)

if __name__ == '__main__':
    app.run('0.0.0.0',9528)
    
    

/template/stuinfo.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
{{ stu_info }}
<table border="2px">                           #--->主要配置             
  <tr>                                         #--->主要配置
    <td>name</td>                              #--->主要配置
    <td>age</td>                               #--->主要配置
    <td>gender</td>                            #--->主要配置
  </tr>                                        #--->主要配置
  <tr>                                         #--->主要配置
    <td>{{ stu_info.name }}</td>               #--->主要配置
    <td>{{ stu_info.get("age") }}</td>         #--->主要配置
    <td>{{ stu_info["gender"] }}</td>          #--->主要配置
  </tr>                                        #--->主要配置
</table>                                       #--->主要配置
</body>
</html>

1.2.8.2、

Python/s3.py
-------------
from flask import Flask ,render_template

app = Flask(__name__)   #__name__文件名
app.debug = True


STUDENT = {'name': 'zhgedu', 'age': 26, 'gender': 'man'}

STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
]

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 38, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}

#1.查看STUDENT放在studentinfo页面

@app.route("/stu")
def stu():
    return  render_template("stuinfo.html", stu_info = STUDENT,stu_list = STUDENT_LIST)

if __name__ == '__main__':
    app.run('0.0.0.0',9528)
    
    

/template/stuinfo.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>

{{ stu_info }}                                 
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_info %}
    <tr>
    <td>{{ stu_info.name }}</td>
    <td>{{ stu_info.get("age") }}</td>
    <td>{{ stu_info["gender"] }}</td>
    </tr>
  {% endfor %}
</table>

{{ stu_list }}                                   #--->主要配置
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_list %}
    <tr>
    <td>{{ stu.name }}</td>
    <td>{{ stu.get("age") }}</td>
    <td>{{ stu["gender"] }}</td>
    </tr>
  {% endfor %}
</table>

</body>
</html>
1.2.8.2.1、
Python376/s3.py
-----------------
from flask import Flask ,render_template

app = Flask(__name__)   #__name__文件名
app.debug = True


STUDENT = {'name': 'zhgedu', 'age': 26, 'gender': 'man'}

STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
]

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 37, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}

#1.查看STUDENT放在studentinfo页面

@app.route("/stu")
def stu():
    return  render_template("stuinfo.html", stu_info = STUDENT,stu_list = STUDENT_LIST,stu_dict = STUDENT_DICT)        #--->主要配置

if __name__ == '__main__':
    app.run('0.0.0.0',9528)
    

/template/stuinfo.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>

{{ stu_info }}
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_info %}
    <tr>
    <td>{{ stu_info.name }}</td>
    <td>{{ stu_info.get("age") }}</td>
    <td>{{ stu_info["gender"] }}</td>
    </tr>
  {% endfor %}
</table>

{{ stu_list }}
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_list %}
    <tr>
    <td>{{ stu.name }}</td>
    <td>{{ stu.get("age") }}</td>
    <td> {% if stu["gender"] != "男" and stu["gender"] != "女"  %}
      李昊
      {% else %}
        {{ stu["gender"] }}
    {% endif %}
    </td>
    </tr>
  {% endfor %}
</table>

{{ stu_dict }}                                       #--->主要配置
{% for foo in stu_dict %}
  {{ stu_dict[foo].get("name") }}
  {{ stu_dict[foo]["age"] }}
  {{ stu_dict[foo].gender }}
{% endfor %}
<table border="2px">                                 #--->主要配置
<td> {% for foo ,item in stu_dict.items() %}
  {{ foo }}
  {{ item.name }}
{% endfor %}
</td>
</table>
</body>
</html>

1.2.8.3、if _else判断

Python/s3.py
-------------
from flask import Flask ,render_template

app = Flask(__name__)   #__name__文件名
app.debug = True


STUDENT = {'name': 'zhgedu', 'age': 26, 'gender': 'man'}

STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
]

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 37, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}

#1.查看STUDENT放在studentinfo页面

@app.route("/stu")
def stu():
    return  render_template("stuinfo.html", stu_info = STUDENT,stu_list = STUDENT_LIST,stu_dict = STUDENT_DICT)

if __name__ == '__main__':
    app.run('0.0.0.0',9528)
    
    

/template/stuinfo.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>

{{ stu_info }}
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_info %}
    <tr>
    <td>{{ stu_info.name }}</td>
    <td>{{ stu_info.get("age") }}</td>
    <td>{{ stu_info["gender"] }}</td>
    </tr>
  {% endfor %}
</table>

{{ stu_list }}
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_list %}                                 
    <tr>
    <td>{{ stu.name }}</td>
    <td>{{ stu.get("age") }}</td>
    <td> {% if stu["gender"] != "男" and stu["gender"] != "女"  %}  #->主要配置
      李昊
      {% else %}
        {{ stu["gender"] }}
    {% endif %}
    </td>
    </tr>
  {% endfor %}
</table>

</body>
</html>

1.2.8.4、global全局传参

Python/s3.py
-------------
from flask import Flask ,render_template

app = Flask(__name__)   #__name__文件名
app.debug = True


STUDENT = {'name': 'zhgedu', 'age': 26, 'gender': 'man'}

STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
]

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 37, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}

@app.template_global()                   #--->主要配置
def ab(a,b):                             #--->主要配置
    return a+b                           #--->主要配置

#1.查看STUDENT放在studentinfo页面

@app.route("/stu")
def stu():
    return  render_template("stuinfo.html", stu_info = STUDENT,stu_list = STUDENT_LIST,stu_dict = STUDENT_DICT)

if __name__ == '__main__':
    app.run('0.0.0.0',9528)
    


/template/stuinfo.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>

{{ stu_info }}
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_info %}
    <tr>
    <td>{{ stu_info.name }}</td>
    <td>{{ stu_info.get("age") }}</td>
    <td>{{ stu_info["gender"] }}</td>
    </tr>
  {% endfor %}
</table>

{{ stu_list }}
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_list %}
    <tr>
    <td>{{ stu.name }}</td>
    <td>{{ stu.get("age") }}</td>
    <td> {% if stu["gender"] != "男" and stu["gender"] != "女"  %}
      李昊
      {% else %}
        {{ stu["gender"] }}
    {% endif %}
    </td>
    </tr>
  {% endfor %}
</table>

{{ stu_dict }}
{% for foo in stu_dict %}
  {{ stu_dict[foo].get("name") }}
  {{ stu_dict[foo]["age"] }}
  {{ stu_dict[foo].gender }}
{% endfor %}
<table border="2px">                                   
<td> {% for foo ,item in stu_dict.items() %}
  {{ foo }}
  {{ item.name }}
{% endfor %}
</td>
</table>

<p> {{ ab(22,2) }} </p>               #--->主要配置       
</body>
</html>

1.2.8.5、macro_定义标签

#Python/s3.py
#-------------
from flask import Flask ,render_template

app = Flask(__name__)   #__name__文件名
app.debug = True


STUDENT = {'name': 'zhgedu', 'age': 26, 'gender': 'man'}

STUDENT_LIST = [
    {'name': 'Old', 'age': 38, 'gender': '中'},
    {'name': 'Boy', 'age': 73, 'gender': '男'},
    {'name': 'EDU', 'age': 84, 'gender': '女'}
]

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 37, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}

@app.template_global()
def ab(a,b):
    return a+b

#1.查看STUDENT放在studentinfo页面

@app.route("/stu")
def stu():
    return  render_template("stuinfo.html", stu_info = STUDENT,stu_list = STUDENT_LIST,stu_dict = STUDENT_DICT)

if __name__ == '__main__':
    app.run('0.0.0.0',9528)
    
    
    
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>

{{ stu_info }}
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_info %}
    <tr>
    <td>{{ stu_info.name }}</td>
    <td>{{ stu_info.get("age") }}</td>
    <td>{{ stu_info["gender"] }}</td>
    </tr>
  {% endfor %}
</table>

{{ stu_list }}
<table border="2px">
  <tr>
    <td>name</td>
    <td>age</td>
    <td>gender</td>
  </tr>
  {% for stu in stu_list %}
    <tr>
    <td>{{ stu.name }}</td>
    <td>{{ stu.get("age") }}</td>
    <td> {% if stu["gender"] != "男" and stu["gender"] != "女"  %}
      李昊
      {% else %}
        {{ stu["gender"] }}
    {% endif %}
    </td>
    </tr>
  {% endfor %}
</table>

{{ stu_dict }}
{% for foo in stu_dict %}
  {{ stu_dict[foo].get("name") }}
  {{ stu_dict[foo]["age"] }}
  {{ stu_dict[foo].gender }}
{% endfor %}
<table border="2px">
<td> {% for foo ,item in stu_dict.items() %}
  {{ foo }}
  {{ item.name }}
{% endfor %}
</td>
</table>

<p> {{ ab(22,2) }} </p>


{% macro my_input(ty,na) %}                                  #--->主要配置
 请输入用户名 -> <input type="{{ ty }}" name="{{ na }}">      #--->主要配置
{% endmacro %}                                               #--->主要配置

  <p>这就是我自己创造的input标签:                              #--->主要配置
    {{ my_input("text","username") }}                        #--->主要配置
    {{ my_input("password", "pass") }}                       #--->主要配置
    {{ my_input("file", "myfile") }}                         #--->主要配置
  </p>                                                       #--->主要配置
</body>
</html>

标签:__,name,stu,python,app,request,flask,Flask,101
From: https://www.cnblogs.com/zikang/p/18060559

相关文章

  • python进行数据下钻的简单测试——非正式版
    具体代码//这个是全国地图下钻到省市地图,我这里以湖南长沙为例:chart_d3a639f3511c48ba8020864474f8950d.on('click',function(param){varselected=param.name;if(selected){switch(selected){......
  • python基础快速入门(二)
    数据类型:Python中常见的数据类型包括数字(int、float、complex)和字符串。python的数值类型会自动转换,相对灵活,整数(int):例如,在32位机器上,整数的位数为32位,取值范围为-2**31到2**31-1,(4个G,)在64位系统上,整数的位数为64位,取值范围为-2**63到2**63-1。长整数(long):Python中......
  • Python魔法:20个让你编程事半功倍的奇淫技巧(建议收藏)
    Python作为一门灵活、充满技巧的语言,有着很多奇技淫巧,今天小编就跟大家分享一下在平时工作中所积累的技巧,这里面既有语法上的技巧,也有库函数的应用,可以帮助大家在平时的工作中提升效率,规避某些错误,一起来看看吧。列表推导式字典推导式使用zip进行并行迭代使用enumerate获......
  • python用win32com.client驱动excel时如何控制是否更新链接?
    python中Pywin32库的win32com.clien模块在驱动Excel时有诸多好处:1、可以决定是否显式地打开Excel应用,调试的时候所见即所得;2、可以用近乎一样的VBA语法,几乎能实现VBA可以实现的所有功能;3、它甚至也支持直接调用Excel中已经写好的宏文件。那它有什么缺点呢?我觉得最主要......
  • Python正则表达式的语句具体的实用例子_2
    importres="""<divclass='jay'><spanid='1'>周杰伦</span></div><divclass='augus'><spanid='2'>马宁</span></div><divclass='tom'><s......
  • Python正则表达式的具体应用例子及注释
    lst=re.findall(r'\d+',"我的电话号是:10086,我女朋友的电话是:10010")print(lst)#finditer:匹配字符串中所有的内容【返回的是迭代器】,从迭代中拿内容,用“.group”num=re.finditer(r"\d+","我的电话号是:10086,我女朋友的电话是:10010")foriinnum:print(i)""......
  • 7-1 jmu-python-输入输出-计算字符串中的数
    7-1jmu-python-输入输出-计算字符串中的数分数10全屏浏览切换布局作者 郑如滨单位 集美大学将字符串中的每个数都抽取出来,然后统计所有数的个数并求和。输入格式:一行字符串,字符串中的数之间用1个空格或者多个空格分隔。输出格式:第1行:输......
  • 内部UI自动化测试培训之python基础
    这个文档的由来是公司内部UI自动化测试培训的资料。部门为了减少测试工作量,准备做UI自动化测试。我写python,其他同事都是java,所以python基础和UI自动化测试selenium的培训就由我来完成。完整教程包括4篇内容,本篇是python的基础内容,高手请跳过。虽然是基础,但是可以看做是一个pyth......
  • Python入门基础知识(简介、文件格式、终端、执行)
    Python入门基础知识,几天跟大家分享的是关于学习Python需要了解的入门基础知识。一起看一看吧!一、Python简介Python定义:是一个免费、开源、跨平台、动态、面向对象的编程语言。Python程序的执行(运行)方式有两种:交互式、文件式交互式即在命令行输入指令,回车即可得到结果......
  • python函数参数检查
    参数检查调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError:>>>my_abs(1,2)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:my_abs()takes1positionalargumentbut2weregiven但是如果参数类型不对,Python......