Python轻量级Web框架Flask(13)—— Flask个人博客项目

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、项目主要文件代码展示

  • 1、app
# Flask个人博客项目
from App import creat_app
app = creat_app()
if __name__ == '__main__':
    app.run(debug=True)
  • 2、models
# models.py : 模型,数据库

'''
    模型      ===      数据库
    类        ——>     表结构
    类属性     ——>    表字段
    一个对象   ——>    表的一行数据
'''
from ..exts import db # 导入db对象就能通过python实现ORM技术,避免了写SQL语句。

# 分类数据表
class CategoryModel(db.Model):
    # 表名
    __tablename__ = 'tb_category'   # 数据迁移就是让模型变成表,ORM就是让类变成模型
    # 定义表字段
    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'   # 数据迁移就是让模型变成表,ORM就是让类变成模型
    # 定义表字段
    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')
  • 3、models_admin
from ..exts import db # 导入db对象就能通过python实现ORM技术,避免了写SQL语句。

# 模型Model:类
# 必须继承 db.Model User才能从普通的类变成模型
class AdminUserModel(db.Model):
    # 表名
    __tablename__ = 'tb_adminuser'   # 数据迁移就是让模型变成表,ORM就是让类变成模型
    # 定义表字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30), unique=True)
    passwd = db.Column(db.String(30))
    # 通过orm技术得到的db,就是用于替代数据库,后面用到数据库相关操作,可以检索。
  • 4、views
# 在views.py中放路由和视图函数

from flask import Blueprint, render_template, request
from ..models.models import * #后面是用views来控制数据库的,所以要在views中导入models文件

# 蓝图(蓝图可以有多个,方便对路径进行区分)
blog = Blueprint('blog', __name__)

# 博客首页
@blog.route('/')
@blog.route('/index/')
def index():
    # 修改首页中“我的相册”当中的6张图,调用photos数据库中前6张图片
    # 修改首页中“文章分类”
    # 修改首页中“iKun推荐”
    # 修改首页中右侧的文章
    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)
  • 4、views_admin
# 在views.py中放路由和视图函数

from flask import Blueprint, render_template, request, redirect, jsonify
from ..models.models_admin import * #后面是用views来控制数据库的,所以要在views中导入models文件
from ..models

相关推荐

  1. Python实战:Flask轻量级web框架入门

    2024-05-13 01:26:04       46 阅读
  2. pythonFlask Web框架

    2024-05-13 01:26:04       52 阅读
  3. Python Flask Web 框架学习笔记+完整项目

    2024-05-13 01:26:04       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 01:26:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 01:26:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 01:26:04       87 阅读
  4. Python语言-面向对象

    2024-05-13 01:26:04       96 阅读

热门阅读

  1. Leetcode 3147. Taking Maximum Energy From the Mystic Dungeon

    2024-05-13 01:26:04       30 阅读
  2. 前端工程化之---git hooks

    2024-05-13 01:26:04       28 阅读
  3. Git 剔除已经纳入版本管理的文件

    2024-05-13 01:26:04       31 阅读
  4. 代码随想录:二分查找相关题目推荐(35、34)

    2024-05-13 01:26:04       31 阅读
  5. 关于fmt的用法

    2024-05-13 01:26:04       28 阅读
  6. 【C++】string类的模拟实现

    2024-05-13 01:26:04       30 阅读
  7. HashMap在Jdk1.8之前并发扩容下的死循环

    2024-05-13 01:26:04       38 阅读