投稿    登录
  博主录制的Python3爬虫视频教程已发布!详情请戳Python3爬虫视频教程!希望大家支持!非常感谢!

【Python搞搞轻量Blog】第二发 Flask入门(2)

Python 仙宇 2792浏览 2评论

Hi,大家好。我是仙宇

上一篇文章 Flask入门 中创建了一个非常简单的Web应用。

但从最简单中又稍微深入的说了一下Flask 基于Werkzeug。

使用模板 (利用HTML)

如何快速利用写好的HTML呢?

 

第一步: 在和主应用的同级目录下,创建一个名为 templates 文件夹。

这个就是存放模板的文件夹,模板就是html文件

第二步:在templates 文件下新建一个index.html 文件

 

然后看下我们的主程序代码,如何去利用模板。

 

第一行: 新导入了一个 render_template 函数

第六行代码: 调用render_template,传入的第一个参数是模板的文件名称,它会在主程序的同级目录下去寻找一个名为templates的文件夹,在这个文件下去寻找模板。第二个传入的参数,会在模板中显示,看上面的html代码图片,发现在第 10 行中有 {{ name }} 这样的一个写法。这里的 name就是你在主程序中传入的参数。

如果我将 {{ name }} 改为 {{ user }} 呢?

那我就需要在主程序中,将render_template(“index.html”,name=’Strong’) 改为 render_template(“index.html”,user=’Strong’)

我们看下效果

 

有人会问了,如果不传入后面的参数,模板中会显示什么呢?

答: 当不传入参数,模板中的变量就是None,不会显示。

 

可不可以改存放模板的文件夹呢?

答:可以,在 Flask(__name__) 修改代码为 Flask(__name__,template_folder=”存放模板文件夹名称”)

在模板中编程

在 Flask入门 中我就说过可以使用jinjia2模板引擎。

使用jinjia2模板引擎的好处在于: 渲染速度快、方便、可进行模板继承,让模板重复使用、可在模板中进行宏、可进行模板直接的导入

我就不举例了,直接列出一些语法。(偷偷懒)

  • {# … #} 模板中的注释
  • {% … %} 用于执行for循环,if条件判断登语句
  • {{ …  }} 用于把表达式的结果输出到模板上,不止可以传数值,还能传列表,数组,字典等

URL 规则

一个关于指定路由的坑:

很多人会这样指定路由

但是这样写路由,当访问 /user/的时候,就会产生一个 “Not Found”的错误,而且会被搜索引擎引用同一个页面两次,第二次则是 /user/ 这样的。

所以,最好的写法应该这样写。

在结尾加上 / ,既不失优雅,又不失B格

 

现在,我需要写三个相似的路由,/user/1/   /user/2/   /user/3/ 这样的三个路由。

难道需要我这样写三次吗?

这样写就显得太Low了。

 

应该这样写:

第一行: 尖括号里面的内容是动态的,凡是匹配到/user/前缀的URL都会映射到这个路由上,在内部将uid作为参数。默认的数值类型是字符串,如果需要指定其他类型,则需要其他写法

通常格式是 <converter:variable_name> 其中,冒号左边的 converter 有这样几种

  • string 接受任何没有/的文本,这也是默认
  • int 整数型
  • float: 浮点型
  • path: 路径,接受/

当然,可以自己去写一个匹配方法,也可以使用正则表达式去匹配,后面如果需要,我就多BB。

第二行:函数中形参uid 接收的值就是装饰器中尖括号的值

比如我现在访问 /user/100,那么uid的值就为100,函数中uid的值也是100

构造URL

Flask用url_for()函数构造url,用起来很方便。它的第一个参数是函数名.

举例:现在我要利用url_for()去构造一个有参数id=10,name=‘XeanYu’,age=16的一个URL

可以看到,我们首先需要先导入 url_for

重点在于第6行

第6行: 第一个参数是函数名,第二个参数id=10,第三个参数name=XeanYu,第四个参数age=16

这个函数可用与jinjia2的模板中。

跳转和重定向

跳转(状态码通常301) => 通常用于旧网址转移到了新网址

重定向(状态码通常302)  => 表示页面是暂时性的转移

在Flask中,重定向是 redirect

举例:

我们在第一行中导入了redirect

当我们访问 index 路由时,就会自动重定向到user路由,状态码为302。你也可以在redirect中指定状态码,比如我要指定状态码为301,我就会这样写: redirect(url_for(‘user’),code=301)

方法 Method

前端通常少不了GET或者POST这两种方法。

我们如何在应用中搞定GET或者POST呢?

首先,我们需要在指定路由的时候就去允许页面去使用GET和POST等其他方法。

这样就允许了GET和POST方法了。

GET方法默认就存在。

abort错误

你可以用 redirect() 函数把用户重定向到其它地方。放弃请求并返回错误代码,用 abort() 函数。这里是一个它们如何使用的例子:

可以看到,没有给我们渲染 Test,而是返回401放弃请求的错误。

表示禁止访问,之后的语句用于不会执行。

 

有什么问题的小伙伴,可以与我交流。

转载请注明:静觅 » 【Python搞搞轻量Blog】第二发 Flask入门(2)

喜欢 (32)or分享 (0)

我的个人微信公众号,联系我请直接在公众号留言即可~

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

想结交更多的朋友吗?

来进击的Coder瞧瞧吧

进击的Coder

QQ群号 99350970 立即加入

进击的Coder灌水太多?

这里是纯粹的技术领地

激进的Coder

QQ群号 627725766 立即加入

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 不错。url_for函数第一个参数是访问端点,非函数名,要写在视图函数中,否则报错。
    alfred32018-04-02 15:58 回复
    • 谢谢指出
      仙宇2018-04-05 23:30 回复