熟悉Flask框架------第一天(调试模式、路由、模板渲染等)

http://docs.jinkan.org/docs/flask/quickstart.html

1、一个最小的应用

hello.py

默认端口为5000,直接访问http://127.0.0.1:5000/

关闭服务器:Ctrl+C

# -*- coding: utf-8 -*-
from flask import Flask     # 引入Flask框架
app = Flask(__name__)       # 创建Flask类的实例,参数为应用模块或者包的名称
@app.route('/')             # 路由
def hello_world():          # 路由函数
    return 'Hello world'
if __name__ == '__main__':  # 确保服务器只会在该脚本被Python解释器直接执行的时候才运行,而不是作为模块导入的时候就运行
    app.run()               # 启动本地web服务器

PS:如果禁用了debug模式或所在网络的用户,可以修改run()让服务器公开可用

app.run(host='0.0.0.0')     # 会让操作系统监听所有公网IP

2、调试模式:绝对不能用于生产环境

启用了调试模式后,服务器会在代码修改后自动重新载入,并且在发生错误时提供一个相当有用的调试器

启用调试模式有两种方式

(1)直接在应用对象上设置

# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello world'
if __name__ == '__main__':
    app.debug = True        # 直接在应用对象上设置启用调试模式
    app.run()

(2)作为run()的一个参数传入

# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello world'
if __name__ == '__main__':
    app.run(debug = True)    # 作为run()的一个参数传入来启用调试模式

3、路由

route():把一个函数绑定到对应的URL上

# -*- coding: utf-8 -*-

from flask import Flask
app = Flask(__name__)
@app.route('/')         # 把函数绑定到对应的URL上
def index():
    return 'Index Page'
if __name__ == '__main__':
    app.run(debug=True)

(1)变量规则

1)添加变量部分

  • a.将特殊的字段标记为<variable_name>,作为命名参数传递到函数中
# -*- coding: utf-8 -*-

from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')      # http://127.0.0.1:5000/user/yj----->输出 User: yj
def show_user_profile(username):
    return 'User: %s' % username
if __name__ == '__main__':
    app.run(debug=True)

  • b.规则可以用converter:variable_name指定一个可选的转换器

转换器:

  • int 接受整数
  • float 同int,但是接受浮点数
  • path 和默认的相似,但也接受斜线
# -*- coding: utf-8 -*-

from flask import Flask
app = Flask(__name__)
@app.route('/post/<int:post_id>')       # http://127.0.0.1:5000/post/123---->输出Post:123
def show_post(post_id):
    return 'Post: %d' % post_id
if __name__ == '__main__':
    app.run(debug=True)

2)唯一URL/重定向行为

  • a.第一种

访问一个结尾不带斜线的URL会被Flask重定向到带斜线的规范URL去

# -*- coding: utf-8 -*-

from flask import Flask
app = Flask(__name__)
@app.route('/projects/')        # http://127.0.0.1:5000/projects---->http://127.0.0.1:5000/projects/
def projects():
    return 'The project page'
if __name__ == '__main__':
    app.run(debug=True)

  • b.第二种

访问结尾带斜线的URL会产生一个404"Not Found"错误

# -*- coding: utf-8 -*-

from flask import Flask
app = Flask(__name__)
@app.route('/about')        # http://127.0.0.1:5000/about/--->404 Not Found
def about():
    return 'The about page'
if __name__ == '__main__':
    app.run(debug=True)

(2)构造URL~~~~~~~~~~~~~~~~~不太懂

用url_for()来给指定的函数构造URL

url_for('函数名','对应URL规则的变量部分的命名参数')

# -*- coding: utf-8 -*-

from flask import Flask, url_for
app = Flask(__name__)
@app.route('/')
def index():
    pass
@app.route('/login')
def login():
    pass
@app.route('/user/<username>')
def profile(username):
    pass
with app.test_request_context():
    print url_for('index')
    print url_for('login')
    print url_for('login', next='/')
    print url_for('profile', username='yang jiao')
if __name__ == '__main__':
    app.run(debug=True)

构建URL的好处(~硬编码是啥???~~)

  • 比硬编码的描述性好,允许一次性修改URL
  • 会转义特殊字符和Unicode数据
  • 妥善处理应用部位与URL的根路径的问题

(3)HTTP方法

1)默认情况下,路由只回应GET请求,但是通过route()装饰器传递methods参数可以改变

# -*- coding: utf-8 -*-

from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return 'This is Post'
    else:
        return 'This is Get'
if __name__ == '__main__':
    app.run(debug=True)

2)常见方法 浏览器告知服务器,客户端想对请求的页面做些什么

  • GET:只获取页面上的信息并发送给浏览器
  • HEAD:获取信息,但是只关心消息头
  • POST:想在URL上发布新消息,并且服务器必须确保数据已经存储且仅存储一次
  • PUT:类似POST,但浏览器和服务器之间的系统可能安全的第二次接收请求
  • DELETE:删除给定位置的信息
  • OPTIONS:给客户端提供一个敏捷的途径来弄清这个URL支持哪些HTTP方法

4.静态文件

在包中或者是模块所在的目录中创建一个名为static的文件夹,即可配置好Web服务器来提供静态文件,在应用中使用/static访问

给静态文件生成URL,使用特殊的'static'端点名

url_for('static', filename='style.css')     # 文件存储在文件系统上的static/style.css

5.模板渲染

Flask配备Jinja2模板引擎

使用render_template()渲染模板

render_template('模板名', '想作为关键字的参数')

# -*- coding: utf-8 -*-

from flask import Flask, render_template
app = Flask(__name__)
# @app.route('/hello/')
@app.route('/hello/<name>')     # http://127.0.0.1:5000/hello/yj
def hello(name=None):
    return render_template('hello.html', name=name)
if __name__ == '__main__':
    app.run(debug=True)

PS:Flask会在templates文件夹里寻找模板

  • a.如果应用是一个模块

    templates文件夹应该与模块同级

    输入图片说明

  • b.如果应用是一个包

    templates文件夹应该作为包的子目录

    输入图片说明

转载于:https://my.oschina.net/yj1993/blog/1577421

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值