flask与http

#  
# 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()



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值