Flask构建微电影(二)
生活随笔
收集整理的這篇文章主要介紹了
Flask构建微电影(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第三章、項目分析、搭建目錄及模型設計
3.1.前后臺項目目錄分析
微電影網站
- 前臺模塊
- 后臺模塊
?前臺(home)
- 數據模型:models.py
- 表單處理:home/forms.py
- 模板目錄:templates/home
?后臺(admin)
- 數據模型:models.py
- 表單處理:admin/forms.py
- 模板目錄:templates/admin
- 靜態文件:static
開始創建目錄,如下:
?
?
3.2.藍圖構建項目目錄
什么是藍圖?
一個應用中或跨用用制作應用組件和支持通用的模式
藍圖的作用
-
將不同的功能模塊化
- 構建大型應用
- 優化項目結構
- 增強可讀性,易于維護
如何使用藍圖構建項目目
(1)home/__init__.py
#coding:utf-8 __author__ = 'derek'from flask import Blueprinthome = Blueprint("home",__name__)import app.home.views(2)admin/__init__.py
#coding:utf-8 __author__ = 'derek'from flask import Blueprintadmin = Blueprint("admin",__name__)import app.admin.views(3)home/views.py
#coding:utf-8 __author__ = 'derek'from . import home #導入藍圖 @home.route("/") def index():return "<h1 style='color:green'>this is home</h1>"(4)admin/views.py
#coding:utf-8 __author__ = 'derek'from . import admin #導入藍圖 @admin.route("/") def index():return "<h1 style='color:red'>this is admin</h1>"(5)app/__init__.py
#coding:utf-8 __author__ = 'derek'from flask import Flask app = Flask(__name__) app.debug = True #調式模式#導入藍圖對象,然后起個別名,易于區分 from app.home import home as home_blueprint from app.admin import admin as admin_blueprint#注冊藍圖 app.register_blueprint(home_blueprint) app.register_blueprint(admin_blueprint,url_prefix = "/admin") #url_prefix添加前綴(6)app/manage.py
#coding:utf-8 __author__ = 'derek'from app import app # 導入的app是app/__init__中實例化的對象:app = Flask(__name__)if __name__ == '__main__':app.run()(7)運行項目(manage,py)
home
admin
3.3.會員及會員登錄日志數據模型設計
?(1)安裝flask-sqlalchemy
pip install -i https://pypi.douban.com/simple --trusted-host pypi.douban.com flask-sqlalchemy?(2)app/models.py
? ??Flask-SQLAlchemy 配置
?表結構的設計
#coding:utf-8 __author__ = 'derek' from datetime import datetime from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysqlapp = Flask(__name__) #連接mysql數據庫(用戶名、密碼、ip、端口和數據庫名字) app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/movie" app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = Truedb = SQLAlchemy(app)#會員 class User(db.Model): #繼承db.Model__tablename__ = "user" #數據庫中表顯示的名字id = db.Column(db.Integer,primary_key=True) #編號,int類型,主鍵name = db.Column(db.String(100),unique=True) #昵稱,字符串類型(長度100),唯一pwd = db.Column(db.String(100)) #密碼email = db.Column(db.String(100),unique=True) #郵箱phone = db.Column(db.String(11),unique=True) #手機info = db.Column(db.Text) #個性簡介face = db.Column(db.String(255),unique=True) #頭像addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間uuid = db.Column(db.String(255),unique=True) #唯一標識符userlogs = db.relationship('UserLog',backref='user') #會員日志外鍵關系def __repr__(self):return "<User %r>"%self.name#會員登錄日志 class UserLog(db.Model):__tablename__ = "userlog"id = db.Column(db.Integer,primary_key=True) #編號#跟User表的id外鍵關聯,類名小寫user_id = db.Column(db.Integer,db.ForeignKey('user.id')) #所屬會員ip = db.Column(db.String(100)) #登錄ipaddtime = db.Column(db.DateTime,index=True,default=datetime.now) #登錄時間def __repr__(self):return "<UserLog %r>"%self
3.4.標簽、電影、上映預告數據模型設
class Tag(db.Model):__tablename__ = "tag"id = db.Column(db.Integer,primary_key=True) #編號name = db.Column(db.String(100),unique=True) #標題addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間movies = db.relationship("Movie",backref="tag") #電影外鍵關系關聯def __repr__(self):return "<Tag %r>"%self.name#電影 class Movie(db.Model):__tablename__ = "movie"id = db.Column(db.Integer,primary_key=True) #編號title = db.Column(db.String(255),unique=True) #標題url = db.Column(db.String(255),unique=True) #地址info = db.Column(db.Text) #簡介logo = db.Column(db.String(255),unique=True) #封面star = db.Column(db.SmallInteger) #星級playnum = db.Column(db.BigInteger) #播放量commentnum = db.Column(db.BigInteger) #評論數tag_id = db.Column(db.Integer,db.ForeignKey('tag.id')) #所屬標簽area = db.Column(db.String(255)) #上映地區release_time = db.Column(db.Date) #上映時間length = db.Column(db.String(100)) #電影播放時間addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間def __repr__(self):return "<Movie %r>"%self.title#電影上映預告 class Preview(db.Model):__tablename__ = "preview"id = db.Column(db.Integer,primary_key=True)title = db.Column(db.String(255),unique=True)logo = db.Column(db.String(255),unique=True)addtime = db.Column(db.DateTime,index=True,default=datetime.now)def __repr__(self):return "<Preview %r>"%self.title?
3.5.評論及收藏電影數據模型設計
#評論 class Comment(db.Model):__tablename__ = "comment"id = db.Column(db.Integer,primary_key=True) #編號content = db.Column(db.Text) #內容movie_id = db.Column(db.Integer,db.ForeignKey("movie.id")) #所屬電影user_id = db.Column(db.Integer,db.ForeignKey("user.id")) #所屬用戶addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間def __repr__(self):return "Comment %r"%self.id#電影收藏 class Moviecol(db.Model):__tablename__ = "moviecol"id = db.Column(db.Integer, primary_key=True) # 編號movie_id = db.Column(db.Integer, db.ForeignKey("movie.id")) # 所屬電影user_id = db.Column(db.Integer, db.ForeignKey("user.id")) # 所屬用戶addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間def __repr__(self):return "Moviecol %r" % self.id?要對應的跟User和Movie關聯起來
class User(db.Model): ...comments = db.relationship("Comment",backref="user") #評論外鍵關系關聯moviecols = db.relationship("Moviecol",backref="user") #電影收藏外鍵關系關聯 class Movie(db.Model):' ' ' comments = db.relationship("Comment",backref="movie" ) #評論外鍵關系關聯moviecols = db.relationship("Moviecol",backref="movie" ) #電影收藏外鍵關系關聯?
3.6.權限及角色數據模型設計
#權限 class Auth(db.Model):__tablename__ = "auth"id = db.Column(db.Integer,primary_key=True) #編號name = db.Column(db.String(100),unique=True) #名稱url = db.Column(db.String(255),unique=True) #地址addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間def __repr__(self):return "<Auth %r>"%self.name#角色 class Role(db.Model):__tablename__ = "role"id = db.Column(db.Integer,primary_key=True) #編號name = db.Column(db.String(100),unique=True) #名稱auths = db.Column(db.String(600)) #權限列表addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間def __repr__(self):return "<Role %r>"%self.name?
3.7.管理員、登錄日志、操作日志數據模型設計
#管理員 class Admin(db.Model):__tablename__ = "admin"id = db.Column(db.Integer,primary_key=True) #編號name = db.Column(db.String(100),unique=True) #管理員賬號pwd = db.Column(db.String(100)) #管理員面is_super = db.Column(db.SmallInteger) #是否為超級管理員,0為超級管理員role_id = db.Column(db.Integer,db.ForeignKey("role.id")) #所屬角色addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間adminlogs = db.relationship("Adminlog",backref='admin') #管理員登錄日志外鍵關系關聯oplogs = db.relationship("Oplog",backref='admin') #管理員操作日志外鍵關系關聯def __repr__(self):return "<Admin %r>"%self.id#管理員登錄日志 class Adminlog(db.Model):__tablename__ = "adminlog"id = db.Column(db.Integer,primary_key=True) #編號admin_id = db.Column(db.Integer,db.ForeignKey("admin.id")) #所屬管理員ip = db.Column(db.String(100)) #登錄ipaddtime = db.Column(db.DateTime,index=True,default=datetime.now) #登錄時間def __repr__(self):return "Adminlog %r"%self.id#操作日志 class Oplog(db.Model):__tablename__ = "oplog"id = db.Column(db.Integer,primary_key=True) #編號admin_id = db.Column(db.Integer,db.ForeignKey('admin.id')) #所屬管理員ip = db.Column(db.String(100)) #登錄ipreason = db.Column(db.String(600)) #操作原因addtime = db.Column(db.DateTime, index=True, default=datetime.now) #登錄時間def __repr__(self):return "Oplog %r" % self.id?
3.8.生成數據庫表
(1)創建數據庫
create database derek default charset utf8 collate utf8_general_ci;(2)安裝pymysql
pip install pymysql(3)在models.py下面加上代碼,然后運行,就生成到數據庫里面了
if __name__ == '__main__':db.create_all() #coding:utf-8 __author__ = 'derek'import pymysql from flask import Flask from datetime import datetimefrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__) #連接mysql數據庫(用戶名、密碼、ip、端口和數據庫名字) app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/movie" app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = Truedb = SQLAlchemy(app)#會員 class User(db.Model): #繼承db.Model__tablename__ = "user" #數據庫中表顯示的名字id = db.Column(db.Integer,primary_key=True) #編號,int類型,主鍵name = db.Column(db.String(100),unique=True) #昵稱,字符串類型(長度100),唯一pwd = db.Column(db.String(100)) #密碼email = db.Column(db.String(100),unique=True) #郵箱phone = db.Column(db.String(11),unique=True) #手機info = db.Column(db.Text) #個性簡介face = db.Column(db.String(255),unique=True) #頭像addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間uuid = db.Column(db.String(255),unique=True) #唯一標識符userlogs = db.relationship('UserLog',backref='user') #會員日志外鍵關系comments = db.relationship("Comment",backref="user") #評論外鍵關系關聯moviecols = db.relationship("Moviecol",backref="user") #電影收藏外鍵關系關聯def __repr__(self):return "<User %r>"%self.name#會員登錄日志 class UserLog(db.Model):__tablename__ = "userlog"id = db.Column(db.Integer,primary_key=True) #編號#跟User表的id外鍵關聯,類名小寫user_id = db.Column(db.Integer,db.ForeignKey('user.id')) #所屬會員ip = db.Column(db.String(100)) #登錄ipaddtime = db.Column(db.DateTime,index=True,default=datetime.now) #登錄時間def __repr__(self):return "<UserLog %r>"%self.id#標簽 class Tag(db.Model):__tablename__ = "tag"id = db.Column(db.Integer,primary_key=True) #編號name = db.Column(db.String(100),unique=True) #標題addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間movies = db.relationship("Movie",backref="tag") #電影外鍵關系關聯def __repr__(self):return "<Tag %r>"%self.name#電影 class Movie(db.Model):__tablename__ = "movie"id = db.Column(db.Integer,primary_key=True) #編號title = db.Column(db.String(255),unique=True) #標題url = db.Column(db.String(255),unique=True) #地址info = db.Column(db.Text) #簡介logo = db.Column(db.String(255),unique=True) #封面star = db.Column(db.SmallInteger) #星級playnum = db.Column(db.BigInteger) #播放量commentnum = db.Column(db.BigInteger) #評論數tag_id = db.Column(db.Integer,db.ForeignKey('tag.id')) #所屬標簽area = db.Column(db.String(255)) #上映地區release_time = db.Column(db.Date) #上映時間length = db.Column(db.String(100)) #電影播放時間addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間comments = db.relationship("Comment",backref="movie" ) #評論外鍵關系關聯moviecols = db.relationship("Moviecol",backref="movie" ) #電影收藏外鍵關系關聯def __repr__(self):return "<Movie %r>"%self.title#電影上映預告 class Preview(db.Model):__tablename__ = "preview"id = db.Column(db.Integer,primary_key=True)title = db.Column(db.String(255),unique=True)logo = db.Column(db.String(255),unique=True)addtime = db.Column(db.DateTime,index=True,default=datetime.now)def __repr__(self):return "<Preview %r>"%self.title#評論 class Comment(db.Model):__tablename__ = "comment"id = db.Column(db.Integer,primary_key=True) #編號content = db.Column(db.Text) #內容movie_id = db.Column(db.Integer,db.ForeignKey("movie.id")) #所屬電影user_id = db.Column(db.Integer,db.ForeignKey("user.id")) #所屬用戶addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間def __repr__(self):return "Comment %r"%self.id#電影收藏 class Moviecol(db.Model):__tablename__ = "moviecol"id = db.Column(db.Integer, primary_key=True) # 編號movie_id = db.Column(db.Integer, db.ForeignKey("movie.id")) # 所屬電影user_id = db.Column(db.Integer, db.ForeignKey("user.id")) # 所屬用戶addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加時間def __repr__(self):return "Moviecol %r" % self.id#權限 class Auth(db.Model):__tablename__ = "auth"id = db.Column(db.Integer,primary_key=True) #編號name = db.Column(db.String(100),unique=True) #名稱url = db.Column(db.String(255),unique=True) #地址addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間def __repr__(self):return "<Auth %r>"%self.name#角色 class Role(db.Model):__tablename__ = "role"id = db.Column(db.Integer,primary_key=True) #編號name = db.Column(db.String(100),unique=True) #名稱auths = db.Column(db.String(600)) #權限列表addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間def __repr__(self):return "<Role %r>"%self.name#管理員 class Admin(db.Model):__tablename__ = "admin"id = db.Column(db.Integer,primary_key=True) #編號name = db.Column(db.String(100),unique=True) #管理員賬號pwd = db.Column(db.String(100)) #管理員面is_super = db.Column(db.SmallInteger) #是否為超級管理員,0為超級管理員role_id = db.Column(db.Integer,db.ForeignKey("role.id")) #所屬角色addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加時間adminlogs = db.relationship("Adminlog",backref='admin') #管理員登錄日志外鍵關系關聯oplogs = db.relationship("Oplog",backref='admin') #管理員操作日志外鍵關系關聯def __repr__(self):return "<Admin %r>"%self.id#管理員登錄日志 class Adminlog(db.Model):__tablename__ = "adminlog"id = db.Column(db.Integer,primary_key=True) #編號admin_id = db.Column(db.Integer,db.ForeignKey("admin.id")) #所屬管理員ip = db.Column(db.String(100)) #登錄ipaddtime = db.Column(db.DateTime,index=True,default=datetime.now) #登錄時間def __repr__(self):return "Adminlog %r"%self.id#操作日志 class Oplog(db.Model):__tablename__ = "oplog"id = db.Column(db.Integer,primary_key=True) #編號admin_id = db.Column(db.Integer,db.ForeignKey('admin.id')) #所屬管理員ip = db.Column(db.String(100)) #登錄ipreason = db.Column(db.String(600)) #操作原因addtime = db.Column(db.DateTime, index=True, default=datetime.now) #登錄時間def __repr__(self):return "Oplog %r" % self.id models.py所有代碼(4)查看數據庫
show databases; user movie; show tables;?
(5)添加一個角色
if __name__ == '__main__':# db.create_all() role = Role(name="超級管理員",auths="")db.session.add(role)db.session.commit()取數據庫查看
desc role; select * from role;?
?(6)添加一個管理員
密碼保存的時候采用hash加密
if __name__ == '__main__':# db.create_all()#添加角色# role = Role(# name="超級管理員",# auths=""# )# db.session.add(role)# db.session.commit()#添加管理員#對密碼加密保存from werkzeug.security import generate_password_hashadmin = Admin(name="derek",pwd=generate_password_hash("123456"),is_super=0,role_id=1)db.session.add(admin)db.session.commit()查看數據庫
select * from admin\G;?
上一篇:Flask構建微電影(一)
?
?
轉載于:https://www.cnblogs.com/derek1184405959/p/9038294.html
總結
以上是生活随笔為你收集整理的Flask构建微电影(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到发大水是什么预兆
- 下一篇: 孕妇梦到屋里漏雨是什么意思