Flask – SQLAlchemy成员增加
简介
结构
$ tree -I "__pycache*|*.pyc" -FCL 3
.
|-- database.db
|-- readme.md
|-- templates/
| |-- addnew.html
| |-- home.html
| `-- show_all.html
`-- views.py
展示
1. 主页

2. 学生信息查看

3. 添加学生信息

技术
- Flask – SQLAlchemy的使用
- flask中表单数据的传递
运行
python .\views.py
代码
创建数据库表单
# crdb.py
import sqlite3
conn = sqlite3.connect('database.db')
print "Opened database successfully";
conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)')
print "Table created successfully";
conn.close()
views视图
from flask import Flask, request, flash, url_for, redirect, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SECRET_KEY'] = "random string"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class Student(db.Model):
# __tablename__ = 'student'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
city = db.Column(db.String(50))
addr = db.Column(db.String(200))
pin = db.Column(db.String(10))
def __init__(self, name, city, addr, pin):
self.name = name
self.city = city
self.addr = addr
self.pin = pin
@app.route('/')
def home():
"""主页"""
return render_template('home.html')
@app.route('/show_all')
def show_all():
"""展示所有"""
data = Student.query.all()
return render_template('show_all.html', students=data)
@app.route('/addnew', methods=['GET', 'POST'])
def addnew():
"""添加新成员"""
if request.method == 'POST':
f_name = request.form['name']
f_city = request.form['city']
f_addr = request.form['addr']
f_pin = request.form['pin']
if not f_name or not f_city or not f_addr:
flash('请填入必要项')
else:
stuinfo = Student(f_name, f_city, f_addr, f_pin)
db.session.add(stuinfo)
db.session.commit()
flash('添加成功')
return redirect(url_for('show_all'))
return render_template('addnew.html')
if __name__ == '__main__':
# db.drop_all()
db.create_all()
app.run(debug=True)
home主页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>主页</title>
</head>
<body>
<h1><a href = "/show_all">查看学生信息</a></h1>
<br>
<h1><a href = "/addnew">添加学生信息</a></h1>
</body>
</html>
添加成员addnew.html
<!DOCTYPE html>
<html>
<body>
<h3>学生信息表</h3>
<hr/>
{%- for category, message in get_flashed_messages(with_categories = true) %}
<div class = "alert alert-danger">
{{ message }}
</div>
{%- endfor %}
<form action = "{{ request.path }}" method = "post">
<label for = "name">姓名</label><br>
<input type = "text" name = "name" placeholder = "张三" /><br><br>
<label for = "city">城市</label><br>
<input type = "text" name = "city" placeholder = "北京" /><br><br>
<label for = "addr">地址</label><br>
<textarea name = "addr" placeholder = "朝阳区大望路"></textarea><br><br>
<label for = "PIN">邮编</label><br>
<input type = "text" name = "pin" placeholder = "100000" /><br><br>
<input type = "submit" value = "输入" />
</form>
<h3><a href="{{ url_for('home') }}">返回主页</a></h3>
</body>
</html>
展示页show_all
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
<h2> 学生表</h2>
<hr>
<h3><a href="{{ url_for('addnew') }}">添加新成员</a></h3>
<table border="1">
<thead>
<tr>
<th>姓名</th>
<th>城市</th>
<th>地址</th>
<th>邮编</th>
</tr>
</thead>
<tbody>
{% for student in students %}
<tr>
<td>{{ student.name }}</td>
<td>{{ student.city }}</td>
<td>{{ student.addr }}</td>
<td>{{ student.pin }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<br>
<h3>消息提示</h3>
<div class="widget-content" style="height: 100px;width:50%;border:1px solid #ccc;">
消息通知:
{%- for message in get_flashed_messages() %}
{{ message }}
{%- endfor %}
</div>
<br>
<h3><a href="{{ url_for('home') }}">返回主页</a></h3>
</body>
</html>
Flask – SQLAlchemy成员增加的更多相关文章
- flask SQLAlchemy中一对多的关系实现
SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...
- flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作
flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...
- flask建表遇到的错误: flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 767 bytes')
error:flask,sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1071, 'Specifie ...
- Flask – SQLite:增加成员
目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 models模块 home主页 list列表页 result消息结果页 studentst添加成员 简介 结构 $ tree ...
- Flask+SQLAlchemy+alembic+Flask-RESTful使用
前言 其实准备把这篇删掉,先写Flask-restful相关的,后来想想大体框架还是先写出来,这两天踩了很多坑,有的谷歌也没有答案.一直摸索也总算是开始了. 正文 SQLAlchemy/alembic ...
- flask SQLALchemy外键及约束
from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = Flask(__ ...
- python3 + flask + sqlalchemy +orm(3):多对多关系
一篇文章有多个tag,一个tag也可以属于多篇文章,文章和tag存在多对多关系 config.py DEBUG = True #dialect+driver://root:1q2w3e4r5t@127 ...
- python3 + flask + sqlalchemy +orm(2):数据库中添加表
往数据库中添加一张保存文章的表,表明为article,字段有id,title,content 同样一个配置文件:config.py DEBUG = True #dialect+driver://roo ...
- python3 + flask + sqlalchemy +orm(1):链接mysql 数据库
1.pycharm中新建一个flask项目 2.按装flask.PyMySQL.flask-sqlalchemy 3.项目下面新建一个config.py 文件 DEBUG = True #dialec ...
随机推荐
- 2019/10/17 CSP模拟 总结
T1 补票 Ticket 没什么好说的,不讲了 T2 删数字 Number 很后悔的是其实考场上不仅想出了正解的方程,甚至连优化都想到了,却因为码力不足只打了\(O(n^2)\)暴力,甚至还因为细节挂 ...
- light oj 1098 数学规律
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> ...
- 项目接入即时聊天客服系统(环信系统)PHP后端操作
环信工作原理: 一.由于环信没有直接的接口来主动调取本项目中的用户数据,所有用户信息必须在环信服务器上注册对应信息成为环信的用户:(这样才能当用户进入聊天时显示其基本信息,如:名称.昵称.电话.邮箱等 ...
- git difff
Generate patch through git diff http://stackoverflow.com/questions/1191282/how-to-see-the-changes-be ...
- java主函数参数传递args
a.javaJava应用程序的主入口方法main(String[] args),表示该方法需要接收一个字符串数组类型的参数, 如果该参数不指定,agrs接收的是null. 程序: public C ...
- 最新二进制安装部署kubernetes1.15.6集群---超详细教程
00.组件版本和配置策略 00-01.组件版本 Kubernetes 1.15.6 Docker docker-ce-18.06.1.ce-3.el7 Etcd v3.3.13 Flanneld v0 ...
- [自学]数据库ER图基础概念整理(转)
ER图分为实体.属性.关系三个核心部分.实体是长方形体现,而属性则是椭圆形,关系为菱形. ER图的实体(entity)即数据模型中的数据对象,例如人.学生.音乐都可以作为一个数据对象,用长方体来表示, ...
- np一些基本操作1
##生成一个一维数组import numpy as np;nb7 = np.arange(0,100,2);print(nb7)print("======================== ...
- 关于obj文件的理解
编译器先编译.cpp为obj文件,看看文件内有没有冲突,然后再进行链接,链接头文件引入的lib库等等,然后就生成exe文件了,下面这个图说的很好:
- Leetcode513. Find Bottom Left Tree Value找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值. 示例 1: 输入: 2 / \ 1 3 输出: 1 示例 2: 输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输出: 7 注意: 您可以假 ...