第二章 应用的基本结构

---恢复内容开始---

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应该就是总线,是服务器的地址,然后在通过路由('/')里的路径去访问分线。

扫描二维码关注公众号,回复: 4594296 查看本文章

问题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)
  

猜你喜欢

转载自www.cnblogs.com/bstisgood/p/10157098.html