小言_互联网的博客

Flask的web框架(目前使用0.10版本1.0以后版本会在新的博客更新)

365人阅读  评论(0)

1.前言

首先感谢大家浏览我的博客,这博客是flask web开发这本书的历程,这是一个完整的大项目,本次是从小的知识点一步步到完成最后的项目,再次提醒本次使用的版本为python3.7,flask0.10,若想看1.0以后版本可以留言感谢大家的浏览,谢谢!(本次博客会每天实时更新,每天进步一点点),因为本人经常使用django2.0所以有些基础的注释不会写入,抱歉,大家有问题可以留言。

最后送给大家一句话:最好学编程的时间是十年前,其次就是现在!

2.程序的基本结构

pip install flask==0.10

2.1初始化

所有的flask都需要创建一个实例。

from flask import Flask
app = Flask(__name__)

2.2路由和视图函数

使用装饰器@app.route()

@app.route('/')
def index():
    return '<h1>hello world</h1>'

大家在网站上经常会看到www.facebook.com/<你的姓名>这种地址,这个姓名就是一个动态的地址

@app.route('/user/<name>')
def user(name):
    return '<h1>hello, {0}!</h1>'.format(name)

2.3启动服务器

注意注意,该方法不能在生产环境中使用,也就是不能直接在服务器运行该指令

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

2.4完整的demo程序

from flask import Flask
app = Flask(__name__)


@app.route('/')
def index():
    return '<h1>hello world</h1>'


@app.route('/user/<name>')
def user(name):
    return '<h1>hello, {0}!</h1>'.format(name)


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

运行效果为

2.5请求-响应循环

目前你可能看不懂,不要紧继续看下去,现在不懂没事,本博客有大量例子,能让你明白这些如何使用

flask全局变量

from flask import request

变量名 说明
current_app 激活程序的程序实例
g 临时存储的对象,每次请求重设这个变量
request 封装了http内的请求
session 用户会话, 需要记住 值的词典

请求钩子

before_first_request:注册一个函数,处理第一个请求之前运行
before_request:注册一个函数, 每次请求之前运行
after_request: 没有异常,请求结束后运行
teardown_request: 即使有异常,请求结束后运行

2.6 使用flask-script支持命令行选项

pip install flask-script

from flask import Flask
from flask.ext.script import Manager

app = Flask(__name__)

manager = Manager(app)


@app.route('/')
def index():
    return '<h1>hello world</h1>'


@app.route('/user/<name>')
def user(name):
    return '<h1>hello, {0}!</h1>'.format(name)


if __name__ == '__main__':
    # app.run(debug=True)
    manager.run()


使用命令行运行

python hello.py runserver --host 0.0.0.0

直接ipconfig 看自己ip
ip:5000

3.模板

使用真实值替换变量,在返回最终得到响应字符串,这一过程成为渲染。为了渲染模板,Flask使用了一个名为jinja2的强大模板引擎。

3.1Jinja2引擎

首先在项目文件夹下创建一个templates的文件夹再创建html文件,python文件hello.py

inded.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
</body>
</html>

user.html

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

hello.py

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)


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




3.2 使用Flask-Bootstrap

若在编写html没有jinja的自动补全可通过以下方式解决

重写user.html

{% extends "bootstrap/base.html" %}

{% block title %}Flasky{% endblock %}

{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" 
            data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">Flasky</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/">Home</a></li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class="container">
    <div class="page-header">
        <h1>Hello, {{ name }}!</h1>
    </div>
</div>
{% endblock %}

若想保留原基模板中定义的内容用{{super()}}

static资源内容flask会自动查找

base.html

{% extends "bootstrap/base.html" %}

{% block title %}Flasky{% endblock %}

{% block head %}
    {{ super() }}
    <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}"
    type="image/x-icon">
{% endblock %}

{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">Flasky</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/">Home</a></li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class="container">
    {% block page_content %}{% endblock %}
</div>
{% endblock %}

3.3使用flask-Monent本地化日期和时间

pip install flask-moment

{% extends "base.html" %}

{% block title %}Flasky{% endblock %}

{% block page_content %}
<div class="page-header">
    <h1>Hello World!</h1>
</div>
<p>The local date and time is {{ moment(current_time).format('LLL') }}.</p>
<p>That was {{ moment(current_time).fromNow(refresh=True) }}.</p>
{% endblock %}

注意的是框架中带有js所以该程序才能正确显示时间

明天更新,感谢浏览


转载:https://blog.csdn.net/TodChen_Blogger/article/details/106074490
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场