python web学习3-虚拟环境与模板

写在前面

虽然之前学了一些基础,但都是跟着网上的视频做的。主要就是模板使用和连接数据库,再往后的博客、部署服务器根本还没有涉及到。最近刚买了一本书,通过返回去看之前的知识点,又发现了一些新的盲点,在这里记录一下,以查漏补缺。


一、虚拟环境

学习flask最好使用虚拟环境,因为这样可以避免包的冲突,保证运行环境的纯净。

windows操作系统下python3标准库中内置了venv包。首先进入一个文件夹,然后运行

python -m venv venv

-m venv作用是以独立的脚本运行标准库中的venv包,是固定的。最后的venv表示虚拟环境的名称,这里我也取名为venv。

使用虚拟环境之前要先激活,命令如下

venv\Scripts\activate

激活之后就可以开始使用了,比如导入flask等。如果要退出虚拟环境,命令行输入deactivate命令即可。

二、基本结构

1. Web开发服务器

除了在py文件中执行app.run(),还可以通过控制台直接利用flask自带的web服务器启动应用:

set FLASK_APP=hello.py
flask run

flask run这个命令在FLASK_APP对应的环境变量指定的python脚本中寻找应用实例。
如果要以调试模式运行,命令如下:

set FLASK_APP=hello.py
set FLASK_DEBUG=1
flask run

使用调试模式时,由于服务器会加载一个叫重载器的工具,因此每次修改源码后服务器都会自动重启,非常方便。

2. 命令行选项

flask命令行支持很多选项,可以通过命令flask --help查看,之前用过的就一个flask run。对于flask run,有一个参数特别有用,那就是–host,他可以告诉服务器在哪个网络接口上监听客户端发来的连接。如果让服务器监听公共网络上的连接,任何同一网络中的其他计算机发来的连接都可以收到。

flask run --host 0.0.0.0

三、模板

模板主要是把业务逻辑和表现逻辑分开,提高应用的可维护性。

1. 变量

flask使用的是一个名为jinja2的强大的模板引擎。他可以将应用中的参数传入模板,对于那些可变的参数,模板中使用{{ name }}的形式表示。同时变量还可以使用过滤器进行修改,过滤器添加在变量之后,通过竖线"|"分隔。以下是jinja2提供的部分常用过滤器:

过滤器名说明
safe渲染时不转义
capitalize首字母大写
lower全小写
upper全大写
title每个单词首字母大写
trim删除首尾空格
striptags删除html标签

对于safe过滤器要说明一下。默认情况下jinja2都会转义所有变量。如果一个变量值为<h1>Hello</h1>,jinja2会把它渲染成&lt;h1&gt;Hello&lt;/h1&gt;,浏览器可以显示它但是不解释。如果想要在变量中显示HTML代码,就要用safe过滤器。

详细的过滤器的介绍可以查看官方文档

2. 控制结构

jinja2除了支持简单的if,for等条件控制语句,还支持宏,类似python中的函数:

{% macro render_comment(comment) %}
	<li>{{ comment }}</li>
{% endmacro %}
	{% for comment in comments %}
		{{ render_comment(comment) }}
	{% endfor %}

除此之外若要重复使用宏,还可以将宏写入单独的文件中,需要使用时再导入:

{% import 'macros.html' as macros %}
<ul>
	{% for comment in comments %}
		{{ macros.render_comment(comment) }}
	{% endfor %}
</ul>

需要多处使用的代码片段,可以统一写入单独文件,再引入所有的模板中:

{% include 'common.html' %}

另一种重复使用代码片段的方式是继承,类似python类的继承。首先应该创建一个名为base.html的基模板:

<html>
<head>
	{% block head %}
	<title>{% block title %}{% endblock %}My Application</title>
	{% endblock %}
</head>
<body>
	{% block body %}
	{% endblock %}
</body>
</html>

基模板中定义的区块可在衍生模板中覆盖或重定义。jinja2使用block和endblock指令在基模板中定义区块。下面是基模板的衍生模板:

{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
	{{ super() }}
	<style>
	</style>
{% endblock%}
{% block body%}
<h1>Hello, World!</h1>
{% endblock %}

可见这和python类非常相似。extends表明继承自base.html,同时衍生模板可以重新定义区块,若想在区块中使用基模板中的内容,调用super()函数。

这种继承模板的方式可以明显加快web前端页面的开发效率,如果已经有了模板,后续只要根据需求进行配置即可。Bootstrap就是一个这样的web框架,他已经预先定义了很多模板,集成了html,css和js。要想在flask中使用Bootstrap,可以使用flask_bootstrap扩展,这个扩展可以直接用pip安装。

但是bootstrap还需进一步学习,因为想要调用基模板中的css/js文件,衍生模板的标签或格式就需要遵循一定的规则,否则无法实现模板中的效果。

3. Flask-Moment

要想在网页中显示时间,一般使用UTC时间。通过把当前UTC时间发送给web浏览器,然后转换成当地时间,再用javascript渲染。Flask-Moment可以完成这一功能,可以通过万能的pip安装:

pip install flask-moment

可以使用Flask-Bootstrap和Flask-Moment实现网页中动态显示时间的效果。


总结

通过这次的学习,成功创建虚拟环境并安装了flask,同时学会用flask自带的web服务器运行程序,通过–host参数可以在公共网络上监听连接;模板中的变量可以通过过滤器修改,且模板最强大的是可以先定义基模板然后继承。Bootstrap就是利用这一点的一个强大的web框架,flask中使用Flask-Bootstrap。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值