使用flask-sqlalchemy创建一对多的关系表
2017-03-15 12:24
274 查看
本案例中是一个用户注册的案例,其中涉及到兴趣爱好这个复选框的,处理方式就是创建一个兴趣爱好表,使用户表(一)对兴趣爱好表(多)的方式存储
index.html代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户注册</title> <link rel="stylesheet" href="{{ url_for('static',filename='./css/bootstrap.css') }}"> </head> <body> <div class="container"> <div class="col-md-5"> <form role="form" action="" method="post"> <fieldset> <legend class="text-center text-primary">用户注册页面</legend> <div class="form-group"> <label>用户名:</label> <input type="text" name="name" placeholder="请输入用户名" class="form-control"/> </div> <div class="form-group"> <label>密码:</label> <input type="text" name="password" placeholder="请输入密码" class="form-control"/> </div> <div class="form-group"> <label>选择你的性别:</label> <div> <label class="checkbox-inline" style="padding-left: 0;"> <input type="radio" name="sex" value="男"> 男 </label> <label class="checkbox-inline" style="padding-left: 0;"> <input type="radio" name="sex" value="女"> 女 </label> </div> </div> <div class="form-group"> <label for="">选择你的兴趣爱好:</label> <div> <label class="checkbox-inline"> <input type="checkbox" name="hobby" value="学习"/> 学习 </label> <label class="checkbox-inline"> <input type="checkbox" name="hobby" value="美女"/> 妹子 </label> <label class="checkbox-inline"> <input type="checkbox" name="hobby" value="游戏"/> 游戏 </label> <label class="checkbox-inline"> <input type="checkbox" name="hobby" value="电话"/> 电视 </label> </div> </div> <div class="form-group"> <label>请选择省份:</label> <select class="form-control" name="province"> <option value="广东省">广东省</option> <option value="湖南省">湖南省</option> <option value="广西省">广西省</option> <option value="福建省">福建省</option> </select> </div> <div class="form-group"> <input type="submit" value="注册" class="btn btn-primary"/> </div> </fieldset> </form> </div> </div> </body> </html>
python代码
#coding:utf-8; from flask import Flask,render_template import flask from flask_sqlalchemy import SQLAlchemy import config app = Flask(__name__) app.debug = True #添加配置文件 app.config.from_object(config) #创建flask-sqlalchemy与flask的关于 db = SQLAlchemy(app) #创建用户的模型 class AddUser(db.Model): __tablename__ = "add_user" user_id = db.Column(db.Integer,primary_key=True,autoincrement=True) user_name = db.Column(db.String(100)) user_password = db.Column(db.String(100)) user_sex = db.Column(db.String(50)) user_province = db.Column(db.String(100)) """ 由于兴趣爱好是多选的,那么就创建一个用户与兴趣爱好的一对多的关系表 """ class Hobby(db.Model): hobby_id = db.Column(db.Integer,primary_key=True,autoincrement=True) hobby_name = db.Column(db.String(100)) #创建一个外键,类型要跟主表一样的,通过db.ForeignKey("add_user.user_id")与主表绑定 user_id = db.Column(db.Integer,db.ForeignKey("add_user.user_id")) #user表示可以根据Hobby中的兴趣爱好查找到用户表中的信息,backref="hobbys"表示用户表可以直接通过hobbys查找到该用户下的兴趣爱好 user = db.relationship("AddUser",backref="hobbys") #创建表 db.create_all() @app.route('/',methods=["GET","POST"]) def index(): if flask.request.method == "GET": return render_template("index.html") else: #获取用户输入信息 name = flask.request.form.get('name') password = flask.request.form.get('password') sex = flask.request.form.get('sex') hobby = flask.request.form.getlist('hobby') province = flask.request.form.get('province') #先查询是否有该用户 search_user = db.session.query(AddUser).filter(AddUser.user_name == name).first() print name, password, sex, hobby, province,search_user if search_user: return u'用户已经注册,不能重复注册' else: search_user = AddUser(user_name=name, user_password=password, user_sex=sex, user_province=province) for item in hobby: hobby = Hobby(hobby_name=item) hobby.user = search_user db.session.add(hobby) db.session.commit() return u'注册成功' if __name__ == '__main__': app.run()
config.py配置文件代码
#coding:utf8 DB_URI = "mysql+mysqldb://root:root@localhost:3306/python-demo?charset=utf8" SQLALCHEMY_DATABASE_URI = DB_URI SQLALCHEMY_TRACK_MODIFICATION = False
补充说明
我们可以在创建数据后跳转到查看刚刚创建数据信息,涉及到查询数据的问题
user_info.html页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户注册信息表</title> <link rel="stylesheet" href="{{ url_for('static',filename='./css/bootstrap.css') }}"> </head> <body> <div class="container"> <table class="table table-striped"> <thead> <tr> <th>No.</th> <th>用户名</th> <th>密码</th> <th>性别</th> <th>兴趣爱好</th> <th>省份</th> </tr> </thead> <tbody> <tr> <td>{{ user.user_id }}</td> <td>{{ user.user_name }}</td> <td>{{ user.user_password }}</td> <td>{{ user.user_sex }}</td> <td> {% for item in hobby%} <span>{{ item.hobby_name }}</span>, {% endfor %} </td> <td>{{ user.user_province }}</td> </tr> </tbody> </table> </div> </body> </html>
新增一个视图路由
@app.route("/user_info/<string:username>") def user_info(username): print username user = db.session.query(AddUser).filter(AddUser.user_name == username).first() # 根据查找的用户id去查找兴趣爱好 dataSet = { "user":user, "hobby":user.hobbys } return render_template('user_info.html',**dataSet)
修改下上面的index路由页面
重定向到新的页面上 return redirect(url_for('user_info',username=name))
相关文章推荐
- Flask系列教程(二)--------------使用SQLAlchemy创建数据模型
- flask-SQLAlchemy一些使用技巧(关联关系的创建)
- flask-sqlalchemy使用命令创建数据库
- delphi - bpl与dll之关系-创建于使用BPL包
- Hibernate学习之 -- 使用Middlegen-Hibernate-r5创建oracle10g的table的hibernate映射文件,Hibernate学习笔记三 ---持久化类和关系数据
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
- 在Python程序和Flask框架中使用SQLAlchemy的教程
- flask 使用 SQLAlchemy 的两种方式
- flask框架:Python 3.5下使用 flask_SqlAlchemy和mysql
- Flask中使用Mysql的几点记录 / flask-sqlalchemy
- 发一个经典的Flask-SQLAlchemy使用场景
- Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
- flask中使用SQLAlchemy进行辅助开发的代码
- 在Linux上使用Python和Flask创建你的第一个应用
- 创建进程 fork()函数的基本使用 父子进程之间的关系
- flask-sqlalchemy不同的关系的实例
- Visual Entity 使用(二)创建一对多关系
- (019):使用对象关系设计器创建对象模型
- 在Linux上使用Python和Flask创建你的第一个应用
- so库创建,使用和依赖关系