python Web开发 flask轻量级Web框架

O、flask介绍 
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。 
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。

Web应用采用访问和响应的方式和用户进行交互。 
主要由用户发起一个Web requetst 请求,对网页进行请求。 
请求成功后由Web 服务器放回一个 response 对象对浏览器进行渲染,显示出返回的网页。 
浏览器访问网页的默认是get方法 
flask应用的默认Ip是本地IP 127.0.0.1 默认端口是5000

一、flask应用的基本构成

#coding=utf-8
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "hello world"

if __name__ == '__main__':
    app.run()

1. 
app = Flask(name
这是建立一个flask应用,并且设置flask应用的目录为该模块的目录。

2. 
@app.route(‘/’) 
设置应用的路由,既访问的Web服务器的目录。

3. 
@app.route(‘/’) 
def hello_world(): 
return “hello world” 
设置路由函数,访问该路由时执行该函数。

4. 
app.run() 
启动flask应用

运行程序,在浏览器中访问服务器地址即可得到返回的网页

二、flask路由和反向路由 
1.参数的传递

在应用中添加一下代码,在访问WebUrl中添加参数可以把参数传递给Web后台程序。 
注意:传进去的值是以字符串形式存在。

@app.route('/users/<id>')
def hello_users(id):
    return "users: " + id

这里写图片描述

2.@route路由的访问方法 
路由默认的是get方法,也可以更改路由方法,例如


@app.route('/user', methods=['POST'])
def hello_user():
    return "hello user"

3.通过request 库来传递id 
得添加requests库的导入

from flask import Flask,request 
@app.route('/query_user')
def query_user():
    id = request.args.get('id')
    return "query_user: id " + id

属性输入采用 url + ?属性名=属性值的格式 
这里写图片描述

4.反向路由 
通过视图函数反导出url地址

@app.route('/query_url')
def query_url():
    return 'query_url' + url_for('query_user')

这样就在query_url函数中访问到了 query_user的路由地址 
这里写图片描述

二、flask模板 
模板是为了使后台逻辑代码与网页前端代码分离。

先引入render_template模块 
from flask import render_template 
新建一个template文件夹,存放html文件。 
1.模板的基本使用 
例如demo.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{ content }}hello world this is first web</h1>
</body>
</html>
@app.route('/')
def hello_world():
    return render_template("demo.html", content="hello flask ")

这里写图片描述

2.传入类


class User:
    def __init__(self, user_id, user_name):
        self.user_id = user_id
        self.user_name = user_name
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>User id is {{ user.user_id }}</p>
<p>User name is {{ user.user_name }}</p>
</body>
</html>
@app.route('/user')
def hello_user():
    user = User(1, "hello user")
    return render_template("demo.html", user=user)

这里写图片描述

  1. 模板的 if 语法 
    query_user.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% if user %}
{{ user.user_name }}
{% else %}
<p> hello world</p>
{% endif %}
</body>
</html>

如果user不为空则输出 user.name 否则 输出hello world

@app.route('/query_user/<id>')
def query_user(id):
    user = None
    if id == '1':
        user = User(2, "zzm")
    return render_template("query_user.html", user = user)

这里写图片描述 
这里写图片描述

4.模板循环

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% for user in users %}
 {{ user.user_id }}----{{ user.user_name }}<br/>
{% endfor %}
</body>
</html>
@app.route('/list')
def user_list():
    users = []
    for i in range(1, 11):
        user = User(1, "zzm" + str(i))
        users.append(user)
    return render_template("user_list.html", users=users)

这里写图片描述

5.模板继承 
以下代码省略HTML主体结构,只下body中的部分 
先写一个base.html

<div>
    这是头部
</div>
{% block content %}
{% endblock %}
<div>
    这是尾部
</div>
  • 然后在one_base.html中用extends 语法继承base.html页面, 
    然后再重写content中的内容
{% extends "base.html"%}
{% block content %}
    <h2>这是第一页</h2>
{% endblock %}
@app.route('/one')
def one_base():
    return render_template("one_base.html")

运行结果 
这里写图片描述

三、消息提醒和异常处理 
1.消息提醒 
在网页中设置提醒的消息需要引入flash模块 
from flask import flash 
flash.html

 <form action="/login" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit" value="提交">
</form>
<h2>{{ get_flashed_messages()[0] }}</h2>
@app.route('/flashDemo')
def flash_demo():
    flash("hello world flash")
    return render_template("flash.html")

这里写图片描述

2.异常处理 
在别人输错网址的时候,服务器会返回一个404异常,将会返回一个浏览器的404网页。 
我们可以进行异常处理,抛出自己写的404网页,这样用户体验比较好。

写个404.html

<h1>this is error</h1>

异常处理语法: 
errorhandler() 括号里面填写错误代码

@app.errorhandler(404)
def not_fond(e):
    return render_template("404.html")

这里随便输错一个网页,就弹出来了我们自己编写的404异常网页 
这里写图片描述


                                                             END

猜你喜欢

转载自blog.csdn.net/chenliangQAQ/article/details/81112828