模型分離(選做)

2022-08-20 07:24:08 字數 3266 閱讀 4063

模型分離--讓**更方便管理

新建models.py,將模型定義全部放到這個獨立的檔案中。

新建exts.py,將db = sqlalchemy()的定義放到這個獨立的檔案中。

models.py和主py檔案,都從exts.py中匯入db。

主py:

from flask import

flask, 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 import

datetime

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 import

sqlalchemy

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...