目录结构

app.py                          web代码
store.db 存储信息的轻量数据库,用的sqlite3
schema.sql 数据库的初始化建表语句
settings.cfg 配置信息
static/style.css html中每个标签相关的格式信息,比如,字体颜色,字体大小,背景颜色,占用宽度高度等
templates/layout.html 目录名必须是templates。显示的web页面,使用jinja2渲染引擎,支持一些判断循环的语句

css

一个style.css的例子

body            { font-family: sans-serif; background: #eee; }         /* 设定body模块的字体和背景颜色 */
h1, h2 { color: #377BA8; } /* 设定h1, h2的文字颜色 */
h2 { font-size: 2.5em; } /* 设定h2的字体大小为默认大小的2.5倍 */
.left {float: left; width: 50%} /* 设定class为left的部分靠左侧,占用50%的宽度 */
.right {float: right; width: 50%} /* 设定class为right的部分靠右侧,占用50%的宽度 */
.comment {width:95%; overflow:auto; word-break:break-all;} /* 设定class为comment的部分占95%的宽度 */

templates

{% xxx %}这样的语句是jinja2的控制语句

layout.html

<!doctype html>
<title>Test</title>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}"> //加载css格式文件
<h1>Test</h1>
{% for message in get_flashed_messages() %}
<div class=flash>{{ message }}</div>
{% endfor %}
{% block body %}{% endblock %}

show.html

{% extends "layout.html" %}
{% block body %} // 新块开始,此处body对应style.css的body
<div class="left"> // 一个新区域,采用style.css中left的格式
<form action="{{ url_for('test') }}" method=post class=test> //提交表单区域
<p>Text:</p> {% for entry in entries %}
<textarea class=comment name=text rows=50 cols=120>{{ entry.text }}</textarea> // 实际填写提交信息的地方
{% else %}
<textarea class=comment name=text rows=50 cols=120></textarea>
{% endfor %}
<input type=submit value=Submit> // 表单提交按钮
</form>
</div>
<div class="right">
<p>Detail:</p>
{% for entry in entries %}
<textarea class=comment rows=50 cols=120>{{ entry.detail_str }}</textarea>
{% else %}
<textarea class=comment rows=50 cols=120></textarea>
{% endfor %}
</div>
<div class="bottom">
{% for entry in entries %}
<h2>{{ entry.result }}</h2>
{% endfor %}
</div>
{% endblock %}

app.py

注意数据库的获取,全局信息的处理。

    """Connects to the specific database."""
import os
import sqlite3
import urllib
import logging
import logging.handlers
import json
from datetime import datetime
from core.analysis import analysis_string_v3
from flask import Flask, request, g, redirect, url_for, render_template app = Flask(__name__)
app.config.from_envvar('SETTINGS', silent=True)
cur_path = os.path.dirname(os.path.realpath(__file__)) def init_logging(filename, logmod):
log_size = 100000000
log_backupcount = 1 handler = logging.handlers.RotatingFileHandler(filename, maxBytes=log_size, backupCount=log_backupcount)
formatter = logging.Formatter("%(asctime)s %(levelname)s: %(message)s", datefmt='[%b %d %H:%M:%S]')
handler.setFormatter(formatter)
my_logger = logging.getLogger(logmod)
my_logger.setLevel(logging.DEBUG)
my_logger.addHandler(handler)
return my_logger logger = init_logging(os.path.join(cur_path, "api.log"), "test") def connect_db():
"""Connects to the specific database."""
logger.debug("[start] connect_db")
rv = sqlite3.connect(app.config['DATABASE'])
rv.row_factory = sqlite3.Row
logger.debug("[end] connect_db")
return rv def init_db():
logger.debug("[start] init_db")
with app.app_context():
db = get_db()
with app.open_resource('schema.sql', mode='r') as f:
db.cursor().executescript(f.read())
db.commit()
logger.debug("[end] init_db") def get_db():
"""Opens a new database connection if there is none yet for the current application context."""
logger.debug("[start] get_db")
if not hasattr(g, 'db'):
g.db = connect_db()
logger.debug("[end] get_db")
return g.db # init_db() @app.teardown_appcontext
def close_db(error):
"""Closes the database again at the end of the request."""
logger.debug("[start] close_db")
if hasattr(g, 'db'):
g.db.close()
logger.debug("[end] close_db") @app.route('/')
def show():
logger.debug("[start] show")
get_db()
cur = g.db.execute('select text from queries order by id desc limit 0, 1')
queries = [dict(query_time=row[0], text=row[1], result=row[2], detail_str=row[3]) for row in cur.fetchall()]
logger.debug("[end] show")
return render_template('show.html', entries=queries) @app.route('/test/', methods=['POST'])
def test():
logger.debug("[start] test")
s = request.form['text']
get_db()
g.db.execute('insert into queries (text) values (?)', [request.form['text']])
g.db.commit()
logger.debug("[end] test")
return redirect(url_for('show'))

启动控制supervisor

注意环境变量写法

environment=SETTINGS=/home/test/settings.cfg

【python】使用flask制作小型页面的关键点总结的更多相关文章

  1. Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统

    一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...

  2. 使用python的Flask实现一个RESTful API服务器端[翻译]

    最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...

  3. 使用python的Flask实现一个RESTful API服务器端

    使用python的Flask实现一个RESTful API服务器端 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文 ...

  4. python的Flask 介绍

    Flask 介绍 知识点 微框架.WSGI.模板引擎概念 使用 Flask 做 web 应用 模板的使用 根据 URL 返回特定网页 实验步骤 1. 什么是 Flask? Flask 是一个 web ...

  5. python之Flask实现登录功能

    网站少不了要和数据库打交道,归根到底都是一些增删改查操作,这里做一个简单的用户登录功能来学习一下Flask如何操作MySQL. 用到的一些知识点:Flask-SQLAlchemy.Flask-Logi ...

  6. 通过flask实现web页面简单的增删改查bootstrap美化版

    通过flask实现web页面简单的增删改查bootstrap美化版 项目目录结构 [root@node1 python]# tree -L 2 . ├── animate.css ├── fileut ...

  7. web基础,用html元素制作web页面

    用div,form制作登录页面,尽可能做得漂亮. 练习使用下拉列表选择框,无序列表,有序列表,定义列表. 观察常用网页的HTML元素,在实际的应用场景中,用已学的标签模仿制作. <!DOCTYP ...

  8. 【Python】Flask系列-URL和视图笔记

    1.学习目标 熟悉Flask相关知识. 熟悉web开发流程. 能独立开发Flask项目. 2.环境配置 Python虚拟环境安装 因为python的框架更新迭代太快了,有时候需要在电脑上存在一个框架的 ...

  9. 转:使用python的Flask实现一个RESTful API服务器端

    提示:可以学习一下flask框架中对于密码进行校验的部分.封装了太多操作. 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了 ...

随机推荐

  1. const命令

    一.基本用法 声明一个只读的常量,这个值不会变. const声明常量与let一样,不可重复声明. 二.本质(我困惑的地方) const实际上保证的并不是变量的值不可以改动,而是变量指向的内存地址不可改 ...

  2. 使用ubuntu做为dotnet core开发环境

    一.安装google浏览器 1.下载安装包(传送门:http://www.google.cn/intl/zh-CN/chrome/browser/desktop/index.html) 2.使用sud ...

  3. <TCP/IP原理> (二) OSI模型和TCP/IP协议族

    1.OSI参考模型 1)作用 2)各层的名称和功能 2.对分层网络协议体系的理解 1)不同节点:层次组成不同,作用不同 2)横向理解:虚通信.对等实体.协议.PDU 3)纵向理解:封装与解封.服务.接 ...

  4. Docker 介绍及基础命令

    Docker 简介 Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linu ...

  5. 转载:Centos升级gcc

    一.检查centos 里面是否安装了gcc g++ 输入命令:rpm -qa|grep gcc*有看到就出来gcc的东西就是装了没有的话就yum install gcc* -y 二.升级gcc 对于C ...

  6. 四、Tensorflow的分布式训练

    TensorFlow中的集群(cluster)指的是一系列能够针对图(Graph)进行分布式计算任务(task).每个任务是同服务(server)相关联的.TensorFlow中的服务会包含一个用于创 ...

  7. 吐血记录微信小程序授权获取Unionid及linux下使用bouncycastle解密用户数据 遇到的坑

    背景 公司小程序上线了,发现系统无法拿到一些用户的UniondID.但是上线前的测试一切都是正常的. 坑1 经排查,发现一些用户通过下面的接口无法得到unionid https://api.weixi ...

  8. Excel——使用INDEX和SMALL实现条件筛选

    如下图所示,如何实现Excel自带的筛选功能呢?(对的,就是软件自带的功能) 如何实现: B13的公式:=IFERROR(INDEX(B:B,SMALL(IF(A$1:A$10=B$12,ROW($1 ...

  9. python中的图像数据库PIL

    from PIL import Image im = Image.open("图片路径") im.function() 常用的函数: 1.im.crop(x,y,x1,y1) 对图 ...

  10. linux内核开发入门学习

    1. 目录结构 内核源代码下载 https://www.kernel.org arch目录 arch是architecture的缩写. 内核所支持的每种CPU体系,在该目录下都有对应的子目录.每个CP ...