Fastapi教程五:项目妹子图(4)-妹子图下载以及文章模型的创建

in fastapi with 3504 comments

一、妹子图下载。
这里提供一份一千多套的COSPLAY下载地址:
https://drive.google.com/file/d/1A63IbCMNz3WymR5j23z40DvpGEU-KmZz/view?usp=sharing

二、创建artcle模型同user模型:
apps/artcle/models.py:

from datetime import datetime

from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, Text, DateTime
from sqlalchemy.sql import func

from core.database import Base,generate_uuid


class Blog(Base):

    __tablename__ = "blogs"

    id = Column(Integer, primary_key=True, index=True)
    uuid = Column(String(100), name="uuid", default=generate_uuid, unique=True)
    title = Column(String(150), unique=True, index=True)
    category = Column(String(30),  index=True)
    author = Column(String(30),  index=True)
    path = Column(String(255), nullable=True)
    content = Column(Text())
    created_at = Column(DateTime(timezone=True), server_default=func.now())

相同的创建schemas.py和crud.py跟user类似这里就不贴了,照着USER改下。
这里的数据字段解释下,
title标题,category分类,author作者默认admin, path存放图片的服务器的URL,content这里有二种模式,一种是正常的文章形式,另外一种是我们这里使用的JSON字段,把图片的文件名JSON化存放。通过PATH+文件名显示到妹子图上。
通过脚本把下载的图片导入数据库。
同样的,在main.py中跟USER一样创建表,加入:

+from apps.artcle import models as blog_models
+blog_models.Base.metadata.create_all(bind=engine)

根目录下:cosplay.py:

import os
import json

from database import SessionLocal
from apps.blog.models import Blog

db = SessionLocal()

base_dir = "T:\\workspace\\python-tools\\cosplay"
#下载好的文件


def innerDb(blog):
    db = SessionLocal()
    try:
        db.add(blog)
        db.commit()
        db.refresh(blog)
    except Exception as e:
        print(e)
    finally:
        db.close()


def get_all_dict():
    dir_list = os.listdir(base_dir) 
    # print(dir_list)
    res = []
    for i in dir_list:
        path = os.path.join(base_dir, str(i))  
        for t in os.listdir( path ):
            # res.append(os.path.join(path, str(t)))
            blog = Blog(
                title= t,
                category= 'cosplay',
                path= "http://yourimg.com/cosplay/"+"{i}/{t}".format(i=i, t=t),
                content= json.dumps(os.listdir(path+"\\%s" %t)),
                author= 'admin'
            )  
            innerDb(blog)
    # return res


if __name__ == '__main__':
    get_all_dict() 

这里注意,我们是图站分离的,准备一台图片服务器,这里的path就是图片服务器的地址。
这个脚本把图片转换成数据库导入到blog表中。
数据库表导入之后是这样的:
请输入图片描述

同样的照着USER的router写一遍,其实模式都一样。
每个app中,包含models、shemas,crud,router这几个文件,内容也大同小异。
实现增删改查,以及路由的功能。
照着前面的user改就可以了。

Comments are closed.