模型分離--讓**更方便管理
新建models.py,將模型定義全部放到這個獨立的檔案中。
新建exts.py,將db = sqlalchemy()的定義放到這個獨立的檔案中。
models.py和主py檔案,都從exts.py中匯入db。
主py:
from flask importflask, render_template, request, redirect, url_for, session
import
config
from functools import
wraps
from sqlalchemy import
or_, and_
from models import
user,fabu,comment
from exts import
db建立flask物件
關聯config.py檔案進來
建立和資料庫的關係對映
...
models.py:
from datetime importdatetime
from werkzeug.security import
generate_password_hash,check_password_hash
from exts import
dbclass user(db.model): #
建立類user
__tablename__ = '
user'#
類對應的表名user
id = db.column(db.integer, primary_key=true, autoincrement=true) #
autoincrement自增長
username = db.column(db.string(20), nullable=false) #
nullable是否為空
_password = db.column(db.string(200), nullable=false) #
密碼加密內部使用
nickname = db.column(db.string(20), nullable=true)
@property
#定義函式,需要用屬性時可以用函式代替
def password(self): #
密碼加密外部使用
return
self._password
@password.setter
def password(self,row_password): #
密碼進來時進行加密,generate_password_hash是乙個密碼加鹽雜湊函式,生成的雜湊值可通過check_password_hash()進行驗證。
self._password =generate_password_hash(row_password)
def check_password(self,row_password): #
check_password_hash函式用於驗證經過generate_password_hash雜湊的密碼。若密碼匹配,則返回真,否則返回假。
result =check_password_hash(self._password,row_password)
return
result
class
fabu(db.model):
__tablename__ = '
fabu
'id = db.column(db.integer, primary_key=true, autoincrement=true)
title = db.column(db.string(100), nullable=false)
detail = db.column(db.text, nullable=false)
creat_time = db.column(db.datetime, default=datetime.now) #
提交時間會自己賦值
author_id = db.column(db.integer, db.foreignkey('
user.id
')) #
資料型別是db.integer,db.foreignkey引數指定外來鍵是哪個表中哪個id
author = db.relationship('
user
', backref=db.backref('
fabu
')) #
建立關聯,其author屬性將返回與問答相關聯的使用者例項,相當於資料庫中的表連線
#第乙個引數表明這個關係的另一端是哪個類,第二個引數backref,將向user類中新增乙個fabu屬性,從而定義反向關係,這一屬性可訪問fabu類,獲取的是模型物件
class
comment(db.model):
__tablename__ = '
comment
'id = db.column(db.integer, primary_key=true, autoincrement=true)
author_id = db.column(db.integer, db.foreignkey('
user.id'))
fabu_id = db.column(db.integer, db.foreignkey('
fabu.id'))
creat_time = db.column(db.datetime, default=datetime.now)
detail = db.column(db.text, nullable=false)
fabu = db.relationship('
fabu',
backref=db.backref('
comments
', order_by=creat_time.desc)) #
order_by=creat_time.desc按時間降序
author = db.relationship('
user
', backref=db.backref('
comments'))
#db.create_all() # 測試是否連線成功
exts.py:
from flask_sqlalchemy importsqlalchemy
db = sqlalchemy() #
建立和資料庫的關係對映
模型分離(選做)
模型分離 讓 更方便管理 新建models.py,將模型定義全部放到這個獨立的檔案中。新建exts.py,將db sqlalchemy 的定義放到這個獨立的檔案中。models.py和主py檔案,都從exts.py中匯入db。主py檔案 from flask import flask,request...
模型分離(選做)
模型分離 讓 更方便管理 新建models.py,將模型定義全部放到這個獨立的檔案中。from werkzeug.security import generate password hash,check password hash from datetime import datetime from...
Nginx做動靜分離
目標 通過訪問 可以訪問到 e tool nginx nginx 1.12.2 html downlocal 1.jpg 1.在nginx的html中建立資料夾downlocal並放入乙個命名為1.jpg 2.在nginx的conf檔案中新增配置檔案static pool並新增內容 location...