目標:創建兩個表「用戶表(user)」和「問題表( question)」,其中問題表中的做者id是是用戶表的id即外鍵的關係。(一個用戶能夠有多個問題)html
Python語句數據庫
(1)用戶類flask
class User(db.Model): __tablename__ = 'user'#用戶表 id=db.Column(db.Integer,primary_key=True, autoincrement=True) telephone=db.Column(db.String(11), nullable=False) username=db.Column(db.String(50), nullable=False) password=db.Column(db.String(100), nullable=False) confirmPassword = db.Column(db.String(100), nullable=False)
(2)問題類服務器
from datetime import datetime
class Question(db.Model): __tablename__ = 'question'#問題表 id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) # now()獲取服務器第一次容許的時間 # now 是每次建立一個模型的時候都獲取當前的時間 create_time = db.Column(db.DateTime, default=datetime.now) # 定義外鍵 ---外鍵指定--使用表名 author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
#外鍵依賴--使用模型名稱(類名稱)
# backref表達的是:一個author對應多個questions
author = db.relationship('User', backref=db.backref('questions'))# 能夠使用:authour.questions 得出當前做者的全部問題
userObj = User(telephone=‘xxxx’, username='xx', password='xx',confirmPassword='xx') db.session.add(userObj) db.session.commit()
from decorations import login_required
@app.route('/question/', methods=["GET", "POST"]) @login_required def question(): if request.method == "GET":# 加載頁面 return render_template("question.html") else:# 接收表單提交 title = request.form.get("title") content = request.form.get("content") question = Question(title=title, content=content) user_id = session.get("user_id")# user_id:登陸用戶的id經過session記錄 user = User.query.filter(User.id == user_id).first() question.author = user db.session.add(question) db.session.commit() return redirect(url_for('index'))
注意此處使用裝飾器login_required來處理是否登陸問題:session
decorations.py中:app
from functools import wraps from flask import session,redirect,url_for # 登陸限制裝飾器
def login_required(func): @wraps(func) def wrapper(*args, **kwargs): if session.get('user_id'): return func(*args, **kwargs) else: return redirect(url_for("login")) return wrapper
使用裝飾器後,若用戶沒有登陸,須要添加問題則會首先跳轉到登陸頁面,登陸後才能操做。ui
question = Question(title=title, content=content) user_id = session.get("user_id") user = User.query.filter(User.id == user_id).first() question.author = user# 問題的做者 db.session.add(question) db.session.commit()
利用反向引用(backref)來,根據做者名字,查找出做者寫過的全部文章。url
# 使用的方法
user = Users.query.filter(Users.username=='xxx').first() result = user.questions# 做者添加的全部問題
for question in result: pass
(1)多對多的關係,須要經過一箇中間表進行關聯。spa
(2)中間表,不能經過class的方式實現,只能經過db.Table的方式實現。.net
(4)設置關聯:tags = db.relationship('Tag',secondary=article_tag,backref=db.backref('articles'))
須要使用一個關鍵字參數secondary=中間表
來進行關聯。
待續。。。能夠參考:http://blog.csdn.net/qq_28877125/article/details/77664575