Flask基础Part2-(路由,请求,响应,重定向)

Flask基础Part2

Flask是一个Python实现的Web开发微框架。他与Django不同,Django是大而全面,而Flask是短小精悍。Django就好比买电脑时的一台整机,而Flask更像是一个可以自己DIY的组装机,可以跟具自己项目的需求对框架进行附加额外的模块。

路由

在Flask中的路由非常的简单,只需要把一个函数绑定到route()装饰器上,并将URL传递进去。

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello world'

路由中的变量规则

有时候需要接收URL中的参数变量,可以把参数标记为一个变量<变量名>,这个部分将会作为命名参数传递给函数。同时还可以限制参数变量的类型<类型:变量名>

@app.route('/user/<username>')
def show_user_info(username):
    # 进行数据查询的代码
    return 'User %s' % username

@app.route('/post/<int:aritle_id>')
def show_article(aritle_id):
    # 进行数据查询的代码
    return 'Aritle ID : %s' % aritle_id

数据类型一共有三种:int, float, path

类型描述
int接受整数
float同 int ,但是接受浮点数
path和默认的相似,但也接受斜线

注意

路由一定要写规范,不规范的URL路由会导致额外的404错误。

例如:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'

当访问projects时,使用规范的URL地址http://127.0.0.1/projects/能够正常的访问,而使用http://127.0.0.1/projects时Flask会自动的重定向到规范的URL地址。

当访问about时,使用不规范的URL地址http://127.0.0.1/about能正常访问,但是当使用规范的URL地址http://127.0.0.1/about/进行访问时就会报404错误。

生成URL

既然Flask能匹配URL自然也能够生成对应的URL。这需要使用到url_for()方法。

from Flask import Falsk, url_for
app = Flask(__name__)

@app.route('/')
def index():
    print(url_for('index'))
    print(url_for('do_login', name='TengTengCai'))
    print(url_for('get_user', user_id='1234'))
    print(url_for('get_grade', grade_id='0987'))
    return 'Index Page'

@app.route('/login/')
def do_login():
    return 'Login Method'

@app.route('/user/<user_id>/')
def get_user(user_id):
    return 'User ID is %s' % str(user_id)

@app.route('/grade/<int:grade_id>/')
def get_grade(grade_id):
    return 'Grade ID is %s type is %s' % (str(grade_id), type(grade_id))

通过python app.py启动服务器,通过访问根路径查看输出结果。

/
/login/?name=TengTengCai
/user/1234/
/grade/0987/

模版渲染

Flask和Django一样都配备了Jinja2模版引擎,可以使用render_template()方法来渲染模版。

目录结构

│  app.py
├─static
└─templates
        index.html

app.py

from flask import render_template, Flask, Manager

app = Flask(__name__)

manager = Manager(app)

@app.route('/index/')
@app.route('/index/<name>/')
def index(name=''):
    return render_template('index.html',name=name )

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

index.html模版文件, 使用jinja2模版渲染,将名字显示在模版html文件中,加载静态文件。

模版文件(templates)和静态文件(statics)的目录访问,默认于app.py属于同级目录,如果目录地址发生改变,需要进行设置。(设置路径会在后面的蓝图(blueprints)讲到)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
    <link type="text/css" rel="stylesheet" href="/static/css/style.css">
</head>
<body>
    <h1>欢迎用户 {{ name }}</h1>
</body>
</html>

style.css文件

* {
    margin: 0;
    padding: 0;
}
h1 {
    color: lightgreen;
}

启动服务,访问http://127.0.0.1:5000/index/TengTengCai/

访问index页面

请求(request)

request请求,在使用请求之前需要从Flask中导入它。

from flask import request

当前请求的HTTP方法可以通过method属性来获取。

GET方法中的参数可以通过request.args.get(key, default)来获取

POST方法中的参数可以通过request.form.get(key, default)来获取

如果请求中存在文件则可以通过files属性来获取Python中的file对象

@app.route('/UserInfo/', methods=['POST', 'GET'])
def get_user():
    if request.method == 'GET':
        args = request.args
        name = args.get('name', '')  # 如果name参数只有一个可使用get
        names = args.getlist('name')  # 如果name参数有多个可使用getlist,返回一个list
    elif rqeuest.method == 'POST':
        name = request.form.get('name'# 如果name参数表单中只有一个可使用get
        names = request.form.getlist('name')  # 如果name参数表单中有多个可使用getlist,返回一个list
        my_files = request.files['my_file']
        my_files.save('filename')  # 存储的文件路径和名称
    else:
        return 'error'
    return 'Name is %s, Names is %s' % (name, str(names))

响应(response)

视图函数的返回值会被自动转换为一个响应对象。如果返回值是一个字符串,它会被转换为该字符串为主体的、状态码为200 OK的MIME类型是test/html的响应对象。

Flask把返回值转换为响应对象的过程:

  1. 如果返回的是一个正确的响应对象,它会从视图直接返回。
  2. 如果返回的是一个字符串,响应对象会用字符串数据和默认参数创建。
  3. 如果返回的是一个元组,且元组中的元素可以提供额外的信息。这样的元组必须是(response, status, headers)的形式, 且至少包含一个元素。status值会覆盖状态代码,headers可以是一个列表或字典,作为额外的消息标头值。
  4. 如果上述条件均不满足,Flask会假设返回值是一个合法的WSGI应用程序,并转化为一个请求对象。(所以经常会看到关于WSGI的代码报错,实则是response响应出错了)

在视图中可以使用make_response()函数。使用前需要导入对应模块

from flask import make_response
@app.route(/myResponse/)
def get_response():
    resp = make_response(render_template('test.html'), 200)  # 生成一个新的response对象
    return resp  # 返回response对象

重定向和错误(redirect,error)

我们可以使用redirect()函数把用户重定向到其他地方。放弃请求并返回错误代码,用abort()函数。

from flask import abort, redirect, url_for, render_template

@app.route('/')  # 主页的路由
def index():
    return redirect(url_for('login'))  # 重定向到login方法

@app.route('/login/')  # login的路由
def login():  
    abort(404)  # 抛出错误,终止运行
    return 'error'

@app.errorhandler(404)  # 获取到404错误
def page_not_found(error)return render_template('page_not_found.html'), 404  # 返回404页面,状态码为404

默认情况下,错误代码会显示一个黑白的错误页面,如果要定制,则可以使用errorhandler()装饰器

Flask是一个轻量级的Python Web框架,它提供了一种简单且灵活的方法来建立Web应用程序。而GPT-2是一个自然语言处理模型,可以进行自动生成文本的任务。 使用Flask框架建立GPT-2涉及以下几个步骤: 1. 准备环境:首先,需要在Python中安装Flask和GPT-2所需的依赖库。可以使用pip命令来安装这些库。 2. 初始化Flask应用:在Python文件中导入Flask库,并创建一个Flask应用实例。可以使用app.route()装饰器来指定URL路径,并定义相应的处理函数。 3. 模型加载:在Flask应用中,可以在启动时加载GPT-2模型,并将其保存在全局变量中,以便在处理请求时使用。 4. 处理请求:当接收到来自前端的请求时,Flask应用会自动调用相应的处理函数。可以在处理函数中使用GPT-2模型来生成所需的文本。然后将生成的文本返回给前端。 5. 前端展示:可以使用HTML和CSS来设计前端界面,通过Flask的模板引擎来渲染页面,并将生成的文本显示在页面上。 6. 启动应用:最后,通过运行Python文件来启动Flask应用。可以使用flask run命令或者指定一个入口文件来启动应用。 需要注意的是,使用Flask框架建立GPT-2只是一个简单的示例,实际应用中可能还需要处理用户的输入、进行数据预处理等更多的操作。而且GPT-2模型的加载和使用可能会消耗大量的计算资源,所以在实际应用中需要考虑模型的性能和部署方式等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值