python+Flask+bootstrap+myAQL搭建新闻网站后台

基于Python的Flask框架快速构建前端调试后台的方案。最近由于移动互联网开发需要搭建后台接口和后端管理网站,但是奈何不会用JAVA,就接触了flask框架。以下便简要介绍一下开发过程。

Flask 概述

什么是Web Framework?

Web Application Framework(Web应用程序框架)或简单的Web Framework(Web框架)表示一个库和模块的集合,使Web应用程序开发人员能够编写应用程序,而不必担心协议,线程管理等低级细节。

什么是Flask?

Flask是一个用Python编写的Web应用程序框架。 它由 Armin Ronacher 开发,他领导一个名为Pocco的国际Python爱好者团队。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。

WSGI

Web Server Gateway Interface(Web服务器网关接口,WSGI)已被用作Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。Werkzeug它是一个WSGI工具包,它实现了请求,响应对象和实用函数。 这使得能够在其上构建web框架。 Flask框架使用Werkzeug作为其基础之一。

jinja2

jinja2是Python的一个流行的模板引擎。Web模板系统将模板与特定数据源组合以呈现动态网页。Flask通常被称为微框架。 它旨在保持应用程序的核心简单且可扩展。Flask没有用于数据库处理的内置抽象层,也没有形成验证支持。相反,Flask支持扩展以向应用程序添加此类功能。

flask应用

初始化app

在编辑器中新建hello.py文件,输入以下代码以初始化app:

1
2
3
4
5
6
7
8
9
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello World’

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

Flask构造函数使用当前模块(name )的名称作为参数。Flask类的route()函数是一个装饰器,它告诉应用程序哪个URL应该调用相关的函数。

1
app.route(rule, options)

  • rule: 参数表示与该函数的URL绑定。
  • options: 是要转发给基础Rule对象的参数列表。

在上面的示例中,’/ ‘ URL与hello_world()函数绑定。因此,当在浏览器中打开web服务器的主页时,将呈现该函数的输出。最后,Flask类的run()方法在本地开发服务器上运行应用程序。

1
app.run(host, port, debug, options)
  • host: 要监听的主机名。 默认为127.0.0.1(localhost)。设置为“0.0.0.0”以使服务器在外部可用;
  • post: 默认值为5000;
  • debug: 默认为false。 如果设置为true,则提供调试信息;
  • options: 要转发到底层的Werkzeug服务器。

    Flask路由

  • Flask中的route()装饰器用于将URL绑定到函数。例如:

    1
    2
    3
    @app.route(‘/hello’)
    def hello_world():
    return ‘hello world’

在这里,URL ‘/ hello’ 规则绑定到hello_world()函数。 因此,如果用户访问http:// localhost:5000 / hello URL,hello_world()函数的输出将在浏览器中呈现。

  • application对象的add_url_rule()函数也可用于将URL与函数绑定:
    1
    2
    3
    def hello_world():
    return ‘hello world’
    app.add_url_rule(‘/’, ‘hello’, hello_world)

    Flask变量规则

通过向规则参数添加变量部分,可以动态构建URL。此变量部分标记为。它作为关键字参数传递给与规则相关联的函数。

1
2
3
4
5
6
7
8
9
10

from flask import Flask
app = Flask(__name__)

@app.route('/hello/')
def hello_name(name):
return 'Hello %s!' % name

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

在上述代码中,,route()装饰器的规则参数包含附加到URL ‘/hello’的。因此,如果在浏览器中输入http://localhost:5000/hello/myblog作为URL,则'myblog'将作为参数提供给hello()函数。

Flask HTTP方法

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

  • GET: 以未加密的形式将数据发送到服务器。最常见的方法。

  • HEAD: 和GET方法相同,但没有响应体。

  • POST: 用于将HTML表单数据发送到服务器。POST方法接收的数据不由服务器缓存。

  • PUT: 用上传的内容替换目标资源的所有当前表示。
  • DELETE: 删除由URL给出的目标资源的所有当前表示。
    默认情况下,Flask路由响应GET请求。但是,可以通过为route()装饰器提供方法参数来更改此首选项。接下来演示一下在URL路由中使用POST方法:
    新建一个login.html文件:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <html>
    <body>

    <form action = "http://localhost:5000/login" method = "post">
    <p>Enter Name:p>
    <p><input type = "text" name = "nm" />p>
    <p><input type = "submit" value = "submit" />p>
    form>

    body>
    html>
    python中使用以下脚本:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    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”参数的值:

1
user = request.form['nm']

在login.html中将方法参数更改为’GET’,然后在浏览器中再次打开它。服务器上接收的数据是通过GET方法获得的。通过以下的步骤获得’nm’参数的值:

1
User = request.args.get(‘nm’)

Flask Request对象

来自客户端网页的数据作为全局请求对象发送到服务器。为了处理请求数据,应该从Flask模块导入。
Request对象的重要属性如下所列:
Form - 它是一个字典对象,包含表单参数及其值的键和值对。
args - 解析查询字符串的内容,它是问号(?)之后的URL的一部分。
Cookies - 保存Cookie名称和值的字典对象。
files - 与上传文件有关的数据。
method - 当前请求方法。

bootstrap_flask简介

初始化

1
2
3
4
5
6
7
8
9
10
from flask import Flask, request, jsonify
import os
from api.v1 import config
from flask_bootstrap import Bootstrap

app = Flask(__name__)Bootstrap(app)
app.config.from_object(config)

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

定义块内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{% extends 'bootstrap/base.html' %}  #声明继承
{% import '_macro.html' as ui %}

{% block title %}{{ title_name }}{% endblock %}

{% block content %}
<div class="page-header">
<div class="container">
<h1>{{ self.title() }}h1>
div>
div>
<div class="container">
{{ ui.input('username') }}
{{ ui.input('password',type='password') }}
div>
{% endblock content %}

{% block head %}
{{ super() }}
{% include 'includes/_head.html' %}
{% endblock %}

bootstrap_flask中html标签等内容可以参考文档:《Bootstrap中文文档》

参考文档


  • 源码
    最后附上本人移动互联网开发新闻管理后台源码(转载请备注来源)
    链接

本文标题:python+Flask+bootstrap+myAQL搭建新闻网站后台

文章作者:梦屿

发布时间:2020年04月27日 - 21:20:26

最后更新:2020年06月28日 - 11:44:10

原始链接:http://yexihe-jpg.github.io/2020/04/27/flask-use/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------