---恢复内容开始---
2.1 初始化
from flask import Flask #从flask模块里找到Flask类 app=Flask(__name__)
问题1:__name__是什么? 答:__name__是一个模块的内置属性,有两种情况:
-
-
-
-
-
-
-
-
-
-
-
-
- 当文件是Flask下的顶层文件时(未被导入),__name__自动变成__main__。
- 当文件被被导入时(变成下层文件了),__name__变成用户自己定的模块名。
-
-
-
-
-
-
-
-
-
-
-
问题2:app是否是一个Flask实例?答:应该是。一个类的实例,有一个参数(__name__),书上说是定位用的。
2.2路由和视图函数
Flask(写在后端上)会接受客户端的请求,以URL的形式传递。 路由决定Flask里那条指令对UR做出反应
@app.route('/')#路由器 def index():#视图函数 return '<h1>你好你好</h1>'
问题1: @app.route('/') 里的('/')是啥?
答:route('')里的东西应该是path ,文中说日常URL有可变的部分,如https://i.cnblogs.com/EditPosts.aspx?opt=1,‘EditPosts.aspx?opt=1’就应该写在()里。这个让我想到了家里的路由器,网线先是一根总线,这是所有数据都要走的线,然后被路由器分成了独立的4根分线。 那i.cnblogs.com应该就是总线,是服务器的地址,然后在通过路由('/')里的路径去访问分线。
问题2:index()是啥
答:文中说是视图函数,让他和路由里的URL一一对应。
@app.route('/users/<name>')#路由器 def index(name):#视图函数 return '<h1>{}你好你好</h1>'.format(name)
<name>是URL的动态部分改变name,视图函数就会改变,装饰器的<name>参数也导入到index中去了
注意:def app.rout(导入参数'/users/<name>')
def wrapperd(index):
index操作
return index
return wrapper
2.4 WEB开发服务器
用的pycharm,新建flask项目自动搞定了
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__':#只有没被导入时候,才会执行run()函数 app.run()
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
问题:URL各部分是什么意思?
答 http是协议 127.0.0.1是本地的ip地址,对应的域名是locolhost(,对的) : 5000是端口
2.6 调试模式
debug模式:1 app.run(debug=True) 还可以新建一个config文件,然后调用config.
2 也可以用socket自带的config字典 书上没有
2.8请求响应循环
流程:请求-分派-响应
from flask import Flask,request app = Flask(__name__) @app.route('/user/<name>') def user(name): return '<h1>{} 你好</h1>'.format(name) @app.route('/') def index(): user_agent=request.headers.get('User-Agent')#request裏面封装了客户端发来的HTTP请求, 用get()函数获取request下(也就是http请求里的header里的内容) return '</p> 你的瀏覽器是{}'.format(user_agent)#get()参数是一个key,也就是说User-Agent是一个key,返回value即代理设置信息 if __name__ == '__main__': app.run(debug=True)
响应:
@app.route('/bad') def index_2(): return '<h1>这个网页失效了</h1>', 400 响应就是视图函数的返回值。视图函数返回三个三个值:1 响应文本 2 状态码默认是200,也可以设置 3 是由http响应首部组成的字典 都由,隔开
还可以返回一个响应对象:
from flask import make_response
@app.route('/bad_2') def index_3(): response=make_response('<h1>这是文件加载了一个cookie!</h1>') response.set_cookie('answer','42') return response
#以下是获取cookies 的方法要导入request
@app.route('/get_cookies')
def get_cookies():
bb=request.cookies.get('answer')
return bb
make_response的参数也有三个,和视图函数返回一致。但是make_response室友属性和方法的。详情见P18
问: set_cookie('answer','42') 是什么?
答: set_cookie()是对象make_reponse下的一个函数,用来设置cookie cookie是以键值对呈现的,所以 set_cookie()的参数也应该是一对 稳重的键时answer 值是42
获取的时候用 request.cookies.get('键')
问:为什么设置cookie时候用response 获取cookie时候要用request呢?
答:是否可以这样理解:是否设置cookie,设置什么cookie是服务器给浏览器的响应信息。让浏览器存储在本地。而读取浏览器的函数要用request,请求。
重定向
from flask import redirect @app.route('/redirect') def redirec(): return redirect('localhost:5000/bad_2')
from flask import abort
@app.route('/<id>')
def get_user(id):
user=load_user(id) #哪来的呢????
if not user:
abort(404)
return '<h1>你好{}'.format(id)