Flask视图和模板简介

一、url_for

  • 1.作用
    • 将来如果修改了URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。
    • url_for()函数会转义一些特殊字符和unicode字符串,这些事情url_for会自动的帮我们搞定。
  • 2.传参数
    url_for中传递参数是查询字符串,用来指定资源。查询字符串从问号?开始,以键值对的形式写出,多个键值对之间使用&分隔。
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/active/')
def active():
    return url_for('active', name='superman', age=34, heght=191)
if __name__ = '__main__':
    app.run(debug=True)
  • 3.url结尾带'/'
    @app.route('/root/')@app.route('/root')是两个不同的url。不带'/'的url在地址结尾输入'/'时会直接报错,带'/'的url在地址结尾输不输'/'都会自动识别为带'/'。

二、定制http的请求方法

Http协议是万维网中数据通信的基础。在该协议中定义了从指定URL检索数据的不同方法。
不同的http方法:

序号 方法与描述
1 GET以未加密的形式将数据发送到服务器。最常见的方法。
2 HEAD和GET方法相同,但没有响应体。
3 POST用于将HTML表单数据发送到服务器。POST方法接收的数据不由服务器缓存。
4 PUT用上传的内容替换目标资源的所有当前表示。
5 DELETE删除由URL给出的目标资源的所有当前表示。
    1. POST
      默认情况下,Flask路由响应GET请求。但是,可以通过为route()装饰器提供方法参数来更改此首选项。
      为了演示在URL路由中使用POST方法,首先让我们创建一个HTML表单,并使用POST方法将表单数据发送到URL。
      将以下脚本另存为login.html

    
      

Enter Name:

现在在Python shell中输入以下脚本:

from flask import Flask, redirect, url_for, request
app = Flask(__name__)
@app.route('/success/')
def success(name):
   return 'welcome %s' % name
@app.route('/login',methods = ['POST', 'GET'])
def login():
   if request.method == 'POST':
      user = request.form['nm']
      return redirect(url_for('success',name = user))
   else:
      user = request.args.get('nm')
      return redirect(url_for('success',name = user))
if __name__ == '__main__':
   app.run(debug = True)

开始运行后,在浏览器中打开login.html,在文本字段中输入name,然后单击提交。表单数据将POST到表单标签的action子句中的URL。http://localhost/login映射到login()函数。由于服务器通过POST方法接收数据,因此通过以下步骤获得从表单数据获得的“nm”参数的值:
user = request.form['nm']它作为变量部分传递给'/ success' URL。浏览器在窗口中显示welcome消息。

  • 2.GET
    在login.html中将方法参数更改为'GET',然后在浏览器中再次打开它。服务器上接收的数据是通过GET方法获得的。通过以下的步骤获得'nm'参数的值:User = request.args.get(‘nm’)这里,args是包含表单参数对及其对应值对的列表的字典对象。与'nm'参数对应的值将像之前一样传递到'/ success' URL。

三、网页跳转和重定向

重定向分为暂时性重定向和永久性重定向,也就是在浏览器上会自动跳转到另一个页面。

  • 1.永久性重定向: http 的状态码是 301 ,多用于旧网址被废弃了要转到一个新的网址确保用户的访问,最经典的就是京东网站,输入 www.jingdong.com 的时候,会被重定向到 www.jd.com。
  • 2.暂时性重定向:http 的状态码是 302 ,表示页面的暂时性跳转。比如访问一个需要权限的网址,如果当前用户没有登录,应该重定向到登录页面,这种情况下,应该用暂时性重定向。
  • 3.Flask中的重定向
    重定向是通过 redirect(location,code=302) 这个函数来实现的。location 表示需要重定向到的 URL,应该配合之前讲的 url_for()函数来使用。code 表示采用哪个重定向,默认是 302( 暂时性重定向 ) ,可以修改成 301来实现永久性重定向。
from flask import Flask,request,url_for,redirect
​app = Flask(__name__)
​@app.route('/')
def hello_world():
    return 'Hello World!'
​# 登录界面
@app.route('/login/')
def login():
    return '请登录'
​# 页面跳转,暂时性重定向302   永久性重定向301
@app.route('/profile/')
def profile():
    if request.args.get('name'):
        return '用户中心页面'
    else:
        return redirect(url_for('login'),code=302)
​if __name__ == '__main__':
    app.run()

四、关于Response响应

视图函数的返回值

  • 1.字符串。return '字符串'
  • 2.元祖。return '字符串', '状态码'
  • 3.字典。return 字典
  • 4.Response。return Response('字符串', '状态码', mimetype = 'text/plain')
  • 5.make_response。return make_response('字符串')

五、flask模板介绍

使用render_template方法可以轻松调用模板,需要传入两个参数,模板名称和模板使用的数据对象。使用之前需要导入render_template方法:

from flask import Flask,url_for,render_template

模板文件需要存放在flask程序文件所在目录的上级目录下的templates文件夹下,flask才能获取该模板文件。
比如我们在templates文件夹下新建一个hello.html的模板,复制如下代码。


Hello from Flask
{% if name %}

Hello {{ name }}!

{% else %}

Hello World!

{% endif %}

在使用如下代码调用模板。

@app.route("/tmpl")
def renderTmpl():
    return render_template("hello.html",name="Hello Tmpl")

六、flask模板传参

  • 1.以关键字参数的形式传
@app.route('/')
def index():
return render_template('/index.html', name='zhangsan')

页面模板中使用{{ }}接收,{{ }}表示包裹的是一些数据变量,上面方法对应的接收方式为:

  • {{ name }}
    • 2.我们通常会传递一组数据,例如我们传递一个字典。
    @app.route('/')
    def index():
        context = {
                     username = 'tom', 
                     age = 32,
                     skill = {1:'python', 2:'html', 3:'ccs'}
    }
        return render_template('/index.html', context=context)
    

    上面方法对应的接收方式为:

  • {{ context.username }}
    • 3.常用的传递参数方法。用解包的方式传参。
    @app.route('/')
    defindex():
    context={
                     username = 'tom',
                     age = 32,
                     skill = {1:'python', 2:'html', 3:'ccs'}
    }
    returnrender_template('/index.html', **context)
    

    上面方法对应的接收方式为:

  • {{ username }}
  • {{ skill.1 }}
  • 你可能感兴趣的:(Flask视图和模板简介)