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)    收藏  举报

导航