0、前言:
★这部分内容是基于之前Flask学习内容的一个实战项目梳理内容,没有可以直接抄下来跑的代码,是学习了之前Flask基础知识之后,再来看这部分内容,就会对Flask项目开发流程有更清楚的认知,对一些开发细节可以进一步的学习。 项目功能,通过Flask制作个人博客。 项目架构:项目分为两部分,第一部分是展示给别人的前端页面,第二部分是展示给自己的后台数据管理页面。 该项目是前后端不分离项目 在搭建一个项目之前一定要先把数据库设计好,把数据库中的表设计好,表和表之间的关系弄清楚
1、项目设计流程:
2、架构设计:
1、由于项目中视图函数可能会有多个,因此最好是通过设计views的python包来管理视图函数,因此在views包中有两个视图函数文件一个是views管理展示给别人的视图函数,views_admin管理展示给自己的后台数据管理的视图函数。 2、同理由于该项目需要也设置了models的python包将数据分为前端展示数据(models)和后台数据(models_admin)两部分。做完这两部分修改后,注意在初始化中修改导包,修改app绑定的蓝图,有了两个视图函数文件,就会有两个蓝图,一个蓝图叫blog管理前端页面,一个蓝图叫admin管理博客后台管理系统。
3、数据库设计:
1、models中数据表设计:【分类表(1):文章表(N)、相册表】 2、models_admin中数据表设计:【用户信息表】
4、项目框架展示
1、注意项目中用到的图片有两种添加方式,图片在数据表中是通过url的方式存储的,添加图片第一种方式是数据服务器,第二种方式是使用静态文件,一般正规公司项目开发都是使用静态文件的方式,通过数据服务器存放图片url。 2、因为views和models都分为了两个包,分别存放展示页面与后台管理页面相关内容,所以这两部分的页面和这两部分的数据库是分开的,因此这两部分视图函数也是分开的,功能上互不干预。
5、项目主要文件代码展示
from App import creat_app
app = creat_app( )
if __name__ == '__main__' : app. run( debug= True )
'''模型 === 数据库类 ——> 表结构类属性 ——> 表字段一个对象 ——> 表的一行数据
'''
from . . exts import db
class CategoryModel ( db. Model) : __tablename__ = 'tb_category' id = db. Column( db. Integer, primary_key= True , autoincrement= True ) name = db. Column( db. String( 30 ) , unique= True ) describe = db. Column( db. Text( ) , default= 'describe' ) articles = db. relationship( 'ArticleModel' , backref= 'category' , lazy= 'dynamic' )
class ArticleModel ( db. Model) : __tablename__ = 'tb_article' id = db. Column( db. Integer, primary_key= True , autoincrement= True ) name = db. Column( db. String( 30 ) , unique= True ) keyword = db. Column( db. String( 255 ) , default= 'keyword' ) content = db. Column( db. Text( ) , default= 'content' ) img = db. Column( db. Text( ) , default= 'img' ) category_id = db. Column( db. Integer, db. ForeignKey( CategoryModel. id ) )
class PhotoModel ( db. Model) : __tablename__ = 'tb_photo' id = db. Column( db. Integer, primary_key= True , autoincrement= True ) url = db. Column( db. Text( ) ) name = db. Column( db. String( 30 ) , unique= True ) describe = db. Column( db. Text( ) , default= 'describe' )
from . . exts import db
class AdminUserModel ( db. Model) : __tablename__ = 'tb_adminuser' id = db. Column( db. Integer, primary_key= True , autoincrement= True ) name = db. Column( db. String( 30 ) , unique= True ) passwd = db. Column( db. String( 30 ) )
from flask import Blueprint, render_template, request
from . . models. models import *
blog = Blueprint( 'blog' , __name__)
@blog. route ( '/' )
@blog. route ( '/index/' )
def index ( ) : photos = PhotoModel. query. limit( 6 ) categories = CategoryModel. query. all ( ) articles = ArticleModel. query. all ( ) commend_arc = articles[ : 4 ] return render_template( 'home/index.html' , photos= photos, categories= categories, articles= commend_arc, arts = articles)
@blog. route ( '/photos/' )
def blog_photos ( ) : photos = PhotoModel. query. all ( ) return render_template( 'home/photos.html' , photos = photos)
@blog. route ( '/article/' )
def blog_aritcle ( ) : articles = ArticleModel. query. all ( ) categories = CategoryModel. query. all ( ) return render_template( 'home/article.html' , articles = articles, categories = categories)
@blog. route ( '/about/' )
def blog_about ( ) : photos1 = PhotoModel. query. all ( ) categories = CategoryModel. query. all ( ) photos = photos1[ : 6 ] return render_template( 'home/about.html' , photos = photos, categories = categories)
from flask import Blueprint, render_template, request, redirect, jsonify
from . . models. models_admin import *
from . . models