flask学习之--模板
模板
如果说 路由这一节主要讲的是客户端通过什么样的链接访问服务器的内容,那么这一节,就需要讲讲服务器中的内容。那什么是服务器中的内容呢?简单的说,就是HTML。怎么理解中间的过程呢?简单来说,flask建立了一套规则:当用户想访问到服务器里的数据时,通过设定好的路径下,访问固定的HTML文件的内容,讲HTML的内容下载到本地浏览器中,由本地的浏览器按照HTML文件格式解析呈现给用户。其中路径:就是设定好的路由,已什么路径进行访问。HTML 文件内容,具体是什么访问?有数据读取有数据写入,那数据是怎么传递的呢,就是本节的问题
0 HTTP 方法
Web应用使用不同的HTTP方法处理URL,一般在缺省情况下,一个路由只会回应GET 请求。也可以使用route()中的装饰器mothods参数来处理不同的HTTP方法,例子如下:
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
1 HTML 模板
flask会自动为我们配置HTML(主要是因为HTML 中有很多固定的格式,我们作为开发者更多的需要关注数据,即可)。那么,配置HTML的过程,或者生成HTML代码的代码,叫做 模板引擎。在Flask中,是一个默认jinja2的模板引擎,来负责这个事情的,更为专业的说法是渲染模板。
使用 render_template()
方法可以渲染模板,你只要提供模板名称和需要 作为参数传递给模板的变量就行了。下面是一个简单的模板渲染例子:
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
{注意一下}:其中有一个隐藏问题,关于render_template('hello.html', name=name),flask怎么知道hello.html在那里呢?这里是可不是绝对路径哦。
解释 : flask会默认在 templates
文件夹中寻找模板。详细文件有以下2种分布方式:
情形 1 : 一个模块:
/application.py
/templates
/hello.html
情形 2 : 一个包:
/application
/__init__.py
/templates
/hello.html
后面会详细的介绍 Jinja2 模板文档
有了HTML之后,又一个问题来了,有了模板渲染之后,那HTML 里面是不是什么都不用写就可以达到我们想要结果呢??答案是,你想多了。有了渲染模板,只能简化我们的开发,但是需要展现的数据,还是需要我们自己写,那怎么简化的呢?先给一个感性的认识吧?
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
比起HTML的代码,这个其实已经很精简了。
2 数据
访问的路径有了,模板有了。那我们总要访问点啥吧?来来来,我们就重点聊聊数据,既然聊数据,就是建立连接向服务器发送数据请求,服务器应该返回点啥给客户端。从客户端的角度来说,就是请求对象(先抽象下),服务器来说,就是请求回复。
对于请求回复,个人愚见,大概分这么几类
2.1 请求回复界面
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
主要过程如下:客户从IP+端口+/hello/(路由路径),访问到服务器,服务器会去查这个路径下的那个函数匹配,一查,哦,是hello这个函数,就开始执行render_template这个函数,这个函数干嘛的?就是渲染hello.html文件的,渲染好了,就通过HTTP 方式,传输到用户的浏览器上,然后浏览器就接收到之后,开始解析并呈现内容。
但是,另外一个问题来了,没交互啊,什么意思,数据是来自服务器上的,1个用户返回的数据和100个用户返回的数据是一样的没变化啊,太死了!! 怎么办?有办法!往下面看。但是,我们需要记住,这种方式叫做静态页面。
2.2 请求回复对象
我们换一个场景,当遇到web界面的时候,也会经常遇到,让我们输入什么帐号,密码啥的,然后一进去,啪,来个hello 啊,欢迎啊,感觉这个系统就是为我们定做的一样。这个怎么玩的?
来来,将上面的场景分解下,输入帐号和密码,其实是叫做表单(form),前端有一类部件就是专门讲的这个,暂时我们可以不去深究它,但是,我们关注的点是,我们在前端输入的信息,服务器是怎么知道的?来上代码!
from flask import request
@app.route('/login', methods=['POST', 'GET'])
def login():
error = None
if request.method == 'POST':
if valid_login(request.form['username'],
request.form['password']):
return log_the_user_in(request.form['username'])
else:
error = 'Invalid username/password'
# the code below is executed if the request method
# was GET or the credentials were invalid
return render_template('login.html', error=error)
主要过程如下:当我们在login页面下,输入自己的用户名和密码之后,点击提交。flask接收到提交到的信息后,开始匹配路由。最后最终会匹配到login函数下,其中request模块,会从http中解析出form中的内容。我们只用按照表单数据进行取就好了。是不是很简单呢?
对于服务器对于数据的回复,不仅仅这些,除此之外,还有文件的下载和上传问题、cookies使用、session的使用,重定向和错误等问题,需要进一步的深入了解。
posted on 2020-12-07 17:00 dongdong51037788 阅读(80) 评论(0) 收藏 举报