flask入门教程(8) - 路由

我们知道,flask可以使用装饰器来指定路由,而这不是唯一的方法,flask还提供了add_url_rule函数,所以如下的代码:

@app.route("/")
def index():
    return render_template("index.html")

还能写成这样:

def index():
    return render_template("index.html")

app.add_url_rule("/", "index", index)

可变路由

接下来我们看一个例子:

@app.route("/user/<username>")
def username(username):
    return username

这里我们的路由变为了/user/<username>,然而这其实代表着username是一个可变的东西,所以当我们访问/user/pynickle时username就是pynickle,页面上就会显示出pynickle,我们还可以指定类型:

@app.route("/user/<int:id>")

这就指定是int类型。

除了这样,我们还可以指定默认值:

@app.route("/user/<int:id>", defaults={id: 1})

可插拔视图

可插拔视图在0.7版本引入,基于用类代替函数,现在来看下面的一个例子:

@app.route('/users')
def show_users(page):
    users = User.query.all()
    return render_template('users.html', users=users)

大家现在了解一下,User是一个数据库类,query.all函数则是用来取出所有数据的。现在假设我们要把这个数据来做数据展示,但是要是我们想把这个东西变成通用模板,那么我们可以把它演变成一个类:

from flask.views import View

class ShowUsers(View):
    def dispatch_request(self):
        users = User.query.all()
        return render_template('users.html', objects=users)

app.add_url_rule('/users', view_func=ShowUsers.as_view('show_users'))

我们首先继承flask.views中的View类,并重写dispatch_request方法,然后通过as_view函数变成视图函数,然而这看起来好像没什么用,接下来继续:

from flask.views import View

class UserListView(View):
    def get_template_name(self):
        pass

    def render_template(self, context):
        return render_template(self.get_template_name(), **context)

    def dispatch_request(self):
        context = {'objects': self.get_objects()}
        return self.render_template(context)

class UserView(UserListView):
    def get_template_name(self):
        return 'users.html'

    def get_objects(self):
        return User.query.all()

现在看起来好多了。

那么我们会想,请求方式怎么获取呢,其实很简单,也使用request.method参数获取。

不过有时候我们可以充分利用类的优势,来把不同的方法变成不同的函数,这时候就需要使用MethodView,只需要继承这个类,然后写上比如说get和post方法就好了,这里不做过多解析。

下次见!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值