Python学习笔记(4)--- Flask开发入门

首先给出Flask中文文档地址:http://docs.jinkan.org/docs/flask/


1 web开发基础:

前端开发:

  • html

  • css

  • JavaScript



MVC设计模式:

  • 视图

  • 控制器

  • 模型


http:

  • 基于请求相应模式

  • 无状态

  • 请求方法: GET, POST, DELETE,PUT



Flask应用的基本构成:

# coding=utf-8
from flask import Flask  # 导入类

app = Flask(__name__)  # 实例化Flask实例


@app.route('/')  # 应用的路由部分,为下面的视图函数给出url
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':  # 运行
    app.run()


路由与反向路由flaskapp.py:

# coding=utf-8
from flask import Flask, request, url_for  # 导入类

app = Flask(__name__)  # 实例化Flask实例


@app.route('/')  # 应用的路由部分,为下面的视图函数给出url
def hello_world():
    return 'Hello World!'

@app.route('/user/<id>')   # , methods=['POST'])
def hello_user(id):
    return 'Hello user!' + id

@app.route('/query_user')  # 访问:http://127.0.0.1:5000/query_user?id=2
def query_user():
    id = request.args.get('id')
    return 'query_user' + id


# 反向路由
@app.route('/query_url')  # http://127.0.0.1:5000/query_url 显示为:query url/query_user
def query_url():
    return 'query url' + url_for('query_user')



if __name__ == '__main__':  # 运行
    app.run()





flash模板:


找到Jinja2一个Python的模板引擎:  https://github.com/mitsuhiko

访问http://jinja.pocoo.org/


flack渲染:

创建index.html文件:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1>{{ content }}</h1>
</body>
</html>


在flaskapp.py中添加:

@app.route('/')  # 应用的路由部分,为下面的视图函数给出url
def hello_world():
    content = "Hello world"
    return render_template("index.html", content=content)


如果传入的是复杂的对象:

models.py

class User(object):
    def __init__(self, user_id, user_name):
        self.user_id = user_id
        self.user_name = user_name

user_index.html:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>hello {{ user.user_name }}</h1>
</body>
</html>


设置路由:

@app.route('/user')
def user_index():
    user = User(1, 'thystar')
    return render_template("user_index.html", user=user)



模板中的条件语句:

def q_user(user_id):
    user = None
    if int(user_id) == 1:
        user = User(1, 'thystar')
    return render_template("user_id.html", user=user)

user_id.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
{% if user %}
    hello {{ user.user_name }}
{% else %}
    no this user
{% endif %}
</body>
</html>


异常处理:

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


404.HTML:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>该页面不存在</h1>
</body>
</html>


另一种方式是:

@app.route('/user/<id>')   # , methods=['POST'])
def hello_user(id):
    if int(id) == 1:
        return render_template("index.html")
    else:
        abort(404)



最后,提一下模板的继承:

在有些情况下,网页切换时,有些页面是不发生改变的,如导航栏,因此,为了避免代码重复,使用继承:不变的部分在父类中实现,变化的部分在子类中实现

首先,定义基类 base.html:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div>
    <h1>Hello World</h1>
</div>
<!--中间变化的部分定义在block中-->
{% block content %}
{% endblock %}
<div>
    <h1>Thanks</h1>
</div>
</body>
</html>


然后定义两个子类 ont_base.html 和 two_base.html

<!--继承基类-->
{% extends "base.html" %}
{% block content %}
    <h2>thystar</h2>
{% endblock %}
<!--继承基类-->
{% extends "base.html" %}
{% block content %}
    <h2>THYSTAR</h2>
{% endblock %}


在flaskapp.py中添加:

@app.route('/one')
def one_base():
    return render_template("one_base.html")


@app.route('/two')
def two_base():
    return render_template("two_base.html")


打开浏览器测试:http://127.0.0.1:5000/two




极客学院:http://www.jikexueyuan.com/course/943_3.html?ss=1






你可能感兴趣的:(python,flask)