一、需要了解以下几个概念:
1.重定向:是通过各种方法将各种网络请求重新定个方向转到其它位置,分为永久重定向和暂时重定向,举个例子:在某网站中弹到注册界面,注册结束后跳转到网页的主页。
2.GET请求:读取URL所标志的信息;
3.POST请求:给服务器添加信息比如说写注释;
※如果只需要从服务器上获取数据,一般使用GET请求;如果前端需要把数据发送给服务器,一般用POST请求。
二、需要理解以下几个函数:
1.app.config.from_object(app_config[config_name]):使用该函数的前提是导入配置数据的文件,调用该函数其实就是在进行配置,把配置数据写在这个文件里也是可以的,但是单独把配置数据放在一个文件中这样可以更好的管理代码。
2.url_for()(属于url_for扩展库) :①给指定的函数构造 URL。它接受函数名作为第一个参数,也接受对应 URL 规则的变量部分的命名参数。
※什么意思呢?我的理解就是,可以将视图函数直接作为参数传递就去,返回值为该视图函数的路由对应的URL;也可以将视图函数作为第一个参数,URL中的变量作为第二个参数传进去,返回视图函数和传进去变量对应的URL。
②访问静态文件(CSS / JavaScript 等)。 只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。
3.jsonify()(属于jsonify扩展库):dic字典转成json字符串,为了让汉字能够正常的变成json字符串而不变成unicode码,需要将JSON_AS_ASCII赋值为FALSE。
※参数传递的两种形式:
1、作为url的组成部分:/book/1
2、查询字符串:/book?id=1
4.request.args.get()(属于request扩展库):获取URL参数的函数。
5.redirect()(属于redirect扩展库):传入需要重定向的目标URL作为参数。
6.f语句:f"my age is{num}",花括号里面的内容是变量部分,f语句做的就是,将变量和字符串部分分开,使花括号里面的内容以变量形式呈现。
app.py
#导入所需要的拓展包;
from flask import Flask,jsonify,url_for,redirect,request
#导入配置文件;
import config
app = Flask(__name__)
#启用配置文件中的配置;
app.config.from_object(config)
#【】表示列表,{}表示字典,()表示原组;
#英雄列表,每一个元素都是一个字典
heros = [
{"id":1,"name":"美国队长"},
{"id":2,"name":"钢铁侠"},
{"id":3,"name":"蜘蛛侠"},
{"id":4,"name":"雷神"},
]
#在@qpp.route上,添加methods参数,这个参数时一个列表类型,可以传递多个方法。
@app.route("/hero/<int:hero_id>",methods=['POST','GET'])
#id作为一个int型的变量,也作为参数传给hero_detail视图函数;
def hero_detail(hero_id):
for hero in heros:
if hero_id == hero['id']:
return hero
return f"id为{hero_id}的图书没有找到!"
@app.route("/hero/list")
def hero_list():
for hero in heros:
hero['url'] = url_for("hero_detail",hero_id = hero['id'])
#在列表的每一个字典元素中再添加一个元素:url地址;
#book['url'] = f"/book/{book['id']}"
return jsonify(heros)#视图函数返回列表内容;
@app.route("/profile")
def profile():
user_id = request.args.get("id")#获取URL参数的函数;
if user_id:
return "个人中心"
else:
return redirect(url_for("hello_world"))#实施重定向;
@app.route('/')
def hello_world(): #根目录下的视图函数
return '<h1>Hello World!<h1>'
if __name__ == '__main__':
app.run()
#重定向(redirect),访问某个url会提前跳转到另一个url上,分为永久性和暂时性
config.py
#flask所有的函数配置直接在这里进行
JSON_AS_ASCII = False