#
# made by 杨庆华
from flask import Flask,redirect,url_for,make_response,g,request
import time
# 构造Flask类传入相应的参数,__name__是特殊的变量,值文件名比如1.py 那么就是1
app = Flask(__name__)
#app.route是装饰器,/和index视图函数绑定在了一起,
# 当用户请求/根目录的时候,会触发index()视图函数,视图函数可以返回从数据库中读取的数据
@app.route('/')
#注意此/是根地址,比如www.helloflask.com 就表示/
#而/hello表示www.helloflask.com/hello
#注册路由必须以/开头
def index():
return '<h1>这是自学的第一个flask程序</h1>'
#也可以为同一个视图函数绑定多个路由,只要用户访问任何一个url就可以响应sayhello的返回内容
@app.route('/hi')
@app.route('/hello')
def say_hello():
return '<h1>hello</h1>'
#动态url
#可以在注册路由的时候传入变量值
@app.route('/greets/<name>')
#但是如果用户在浏览器输入忘记加name,那么会返回404
#所以我们可以设置默认名字
@app.route('/greets/',defaults={'name':'programmer'})
def greet(name):
return '<h1>hey my name is %s</h1>' % name;
# 可以避免使用硬编码,所以采取配置变量
#配置变量,实际上就是字典中添加一个键值对
#注意配置名称需要大写否则就会读不出来
app.config['ADMIN_NAME']='Peter'
#还可以用update方法一次配置多个值
app.config.update(
TESTING=True,
SECRET_KEY='jiaoejffijef'
)
value = app.config['SECRET_KEY']
print(value)
# app.run()
# URL与端点,如果URL写死了,对后期的维护不利
# url_for()生成相对路劲
@app.route('/urlspot')
def index2():
# print(url_for('index2'))
return 'this is a urlsopt,你可以通过视图函数得到对应的URL%s' %url_for('index2')
# 一个网站肯定不能简单返回一个hello world ,应当有html、css、js模板,默认存放在根目录下的templates里
# app.url_map 输出咱这个app.py的所有请求URL,格式为表格
#当请求发来了,flask程序把请求里的url与app.py里的所有URL进行对照,返回相对应的视图函数
#否则就会404 找不到
#用户在地址栏中的变量如果不在这三个之中就会 Not Found
@app.route('/colors/<any(blue,white,red):color>')
def three_color(color):
return 'Your favorite color is %s' %color;
#请求钩子函数,在请求处理的不同阶段,会注册不同的函数
# ,比如before_first_request 注册一个函数,在处理第一个请求前运行
#after_request 注册一个函数,在处理请求后执行
@app.before_request
def dosomething():
#这里的代码会在每一个请求处理前执行
g.name = request.args.get('name')
print("我调用了名字都是%s的函数"%g.name)
#重定向,如果你访问的资源返回状态码是302,那么需要重定向,服务器会给你location:/hello告诉客户端,你需要重新访问这个hello才行
@app.route('/kpd')
def kpd():
return redirect(url_for('index'))
#会重定向到index视图函数的路径,显示人家的响应内容
#设置响应的类型格式MIME
@app.route('/foo')
def foo():
response = make_response('hello,this could transform the form of response')
response.mimetype='text/html'
return response
app.run()
#如果是设置为html格式就是 response.mimetype='text/html'
#返回上一次请求的url
@app.route('/do_something_or_redirect')
def redirect_back(default='hello',**kwargs):
for target in request.args.get('next'),request.referrer:
if target:
return redirect(target)
return redirect(url_for(default,**kwargs))
def do_something():
return redirect_back()
flask与http
最新推荐文章于 2024-07-11 06:11:50 发布