Python3:Flask的使用(简单的使用)

1.前提

首先需要安装Flask,通过pip list的方式查看是否安装了Flask
在这里插入图片描述
本人使用的版本为:Flask 1.1.1

2.开始创建一个Flask项目

创建后发现具有一个templates文件夹和static文件夹,还有一个app.py这个文件

1.启动后发现可以访问

2.查看当前的app.py文件

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

3.分析当前的app.py中的代码,

  1. app = Flask(__name__)这里应该就是创建一个Flask的实例,并传递这个py文件的名称
  2. 发现app.run()应该就相当于springboot中的SpringApplication.run(),都是启动的入口类
  3. @app.route('/')就相当于当前SpringBoot中的注解@RequestMapping("/"),是用来通过这个url才能访问这个方法的控制器
  4. return 'Hello World!'表示返回的内容为text/html,就是直接将这个当作文本返回不做任何处理

可以通过以上的分析实现访问控制@app.route(’/’),可以通过定义路由的方式实现方法的调用

3.查看Flask的官方文档

本人访问的是:Flask快速上手

3.1 创建一个hello路由

@app.route("/hello")
def hello():
     return "你好张三!"  # 这里默认返回的数据为text/html

3.2 创建一个rest风格的路由并传递参数

# 使用restful实现当前的操作
@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % (username)

@app.route("/user/del/<int:del_id>")
def del_user_by_id(del_id):
    return "当前删除的用户编号为:%d" % (del_id)

3.3 关于路由定向(这里是指路由的结尾为/)

例如:有一个路由为@app.route("/hello/"),如果访问的路径为/hello的时候会自动定向到/hello/这个路由中,但是注意不能同时存在@app.route("/hello/")和@app.route("/hello")会报错的!

# 使用当前的模板测试,就是将当前的html静态页面放在当前的templates
@app.route('/hello/')
def hello():
    return "hello"

3.4 创建一个返回json数据的路由

在当前的Flask中默认如果使用返回的数据类型为:dict(字典类型)时默认返回的数据为json的数据类型

app.route("/json")
def json_result():
    return {"username": "张三", "age": 18, "pwd": "123456"}  # 如果返回的数据为字典类型的数据默认会转换为json数据返回

这里出现了乱码所以需要添加这个解决json乱码问题:app.config['JSON_AS_ASCII'] = False
在这里插入图片描述

3.5 转发(就是页面的转发)

1.在当前的Flask中使用转发需要导入render_template模块from flask import render_template

2.在导入后需要编写当前的html页面,就是当前render_template需要转发的页面,这个html页面需要写在当前的templates文件夹中

# 使用当前的模板测试,就是将当前的html静态页面放在当前的templates
@app.route('/hello/')
@app.route('/hello/<name>')
def hello():
    # assert name is not None 断言的简单使用
    return render_template('hello.html')

当前的hello.html页面

<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello, World!</h1>
{% endif %}

3.6 转发并传递参数过去

这里默认使用路径参数,传递参数的时候需要使用name=name的方式传递,等号左边的的name就是当前的html页面使用的参数等号后面的参数就是需要传递的数据

# 使用当前的模板测试,就是将当前的html静态页面放在当前的templates
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    # assert name is not None 断言的简单使用
    return render_template('hello.html', name=name)

3.7 模板的语法

由于当前的Flask的模板语法是参照当前的Django的语法实现的,所以直接使用当前Django的语法即可!

3.8 重定向到页面

使用重定向的时候需要导入redirect模块from flask import redirect

@app.route("/redirect/", methods=["GET"])
def redirect_page():
    return redirect(location="/hello")

在这里插入图片描述

3.9 获取提交的参数

这里假设用户登录操作!

在当前的Flask中获取提交的参数有两种一种就是表单的提交一种就是GET请求的参数,都需要导入request模块才能使用:from flask import request

  1. 获取当前的GET请求中的参数需要使用 :request.args[“参数名称”]
  2. 获取当前的POST请求中的参数需要使用:request.form[“参数名称”]
  3. 获取上传的文件需要使用:request.files[‘表单提交文件的表单名’]

登录界面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录界面</title>
</head>
<body>
<form action="login" method="post">
    <input type="text" name="loginName"/> <br/>
    <input type="text" name="loginPwd"/> <br/>
    <input type="submit" value="登录"/> <br/>
    {{ msg }}
</form>
</body>
</html>

登录成功的页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这里是主页面</title>
</head>
<body>
<h1>登录成功!欢迎用户:{{ loginName }}</h1>
</body>
</html>

后台的处理表单提交的方法

@app.route('/')
def to_login_page():
    return render_template("login.html")


@app.route("/login", methods=["POST"])
def login():
    loginName = request.form["loginName"]
    loginPwd = request.form["loginPwd"]
    if loginName == "admin" and loginPwd == "admin":
        print("login success")
        return render_template("index.html", loginName=loginName)
    else:
        return render_template("login.html", msg="用户名或密码错误!")

@app.route("/addUser", methods=["GET", "POST"])
def get_form_params():
    # 使用三元表达式写入请求的方式
    method_way = "POST" if request.method == "POST" else "GET"
    username = None
    # 通过当前的request.form[] 方式获取的是post请求传递的参数,不能用于get请求获取参数,如果参数不存在的话就会报错
    if "username" in request.form:  # 用于处理post请求的数据,一般用于处理表单提交的数据
        username = request.form["username"]
    elif "username" in request.args:  # 一般用于当前的get请求传递的参数或者数据
        username = request.args["username"]
    return "当前使用的请求方式为:{0},传递的参数为:{1}".format(method_way, username)


3.10 使用session的方式传递参数

在Flask中使用session的时候需要导入session模块:from flask import session

在使用的时候还需要定义secret_keyapp.secret_key = "10010"(这里随便瞎写的)

@app.route('/')
def to_login_page():
    return render_template("login.html")


@app.route("/login", methods=["POST"])
def login():
    loginName = request.form["loginName"]
    loginPwd = request.form["loginPwd"]
    if loginName == "admin" and loginPwd == "admin":
        print("login success")
        session["userName"] = loginName  # 使用session的时候需要设置secret_key
        return render_template("index.html", loginName=loginName)
    else:
        return render_template("login.html", msg="用户名或密码错误!")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这里是主页面</title>
</head>
<body>
<h1>登录成功!欢迎用户:{{ loginName }}</h1>
<h1>Session中的内容:{{ session.userName }}</h1>
</body>
</html>

在这里插入图片描述

4.总结

1.使用返回数据为json的时候一定要设置app.config['JSON_AS_ASCII'] = False,否者出现乱码问题

2.在获取提交的数据的时候有两种处理方式:request.args和request.form

3.在使用session的时候需要设置app.secret_key ,否者会报错的!

4.在使用模板html的时候语法与当前的Django的语法基本一致

以上纯属个人见解,如有问题请联系本人!

发布了215 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/103442169