首页 > 其他分享 >创建个人博客网站记录-2.3 建立模型以及对应的CRUD操作

创建个人博客网站记录-2.3 建立模型以及对应的CRUD操作

时间:2024-05-08 09:58:56浏览次数:25  
标签:return CRUD 博客 Base 2.3 password True id cls

2.3、 建立模型以及对应的CRUD操作

在本节中,创建了USER用户类BLOG博文类两个对象类,并实现了其基本的增删改查的操作。


# flaskr/models.py
from flask import g
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column,Integer,String,TIMESTAMP,ForeignKey,Text
from werkzeug.security import check_password_hash,generate_password_hash

from sqlalchemy.exc import IntegrityError

Base:SQLAlchemy = g.db

# 在此文件中创建对应的模型

# 创建用户类
class User(Base.Model):
    __tablename__ = "user"
    id = Column(Integer,primary_key=True,autoincrement=True)
    username = Column(String(20),nullable=True,unique=True)
    password_hash = Column(String(255),nullable= True)
    
    # 生成hash密码
    @staticmethod
    def hash_password(password):
        return generate_password_hash(password)
    # 验证密码
    def verify_password(self,password):
        return check_password_hash(self.password_hash,password)
    
    # 创建用户
    @classmethod
    def create(cls,username,password):
        if cls.read_by_username(username) is None:
            user = cls(username = username,password_hash = cls.hash_password(password))
            Base.session.add(user)
            Base.session.commit()
            return user
        raise IntegrityError(None,None,None)
    # 根据用户的id来读取用户
    @classmethod
    def read_by_id(cls,user_id):
        return cls.query.filter_by(id = user_id).first()
    
    #根据用户名来读取用户
    @classmethod
    def read_by_username(cls,user_name):
        return cls.query.filter_by(username = user_name).first()
    
    # 删除用户
    @classmethod
    def delete_user(cls,user_id):
        user:User = cls.read_by_id(id=user_id)
        if user:
            Base.session.delete(user)
            Base.session.commit()
            return True
        return False
    # 更新密码
    def update_password(self,new_pwd):
        self.password_hash = self.hash_password(new_pwd)
        try:
            Base.session.merge(self)
            Base.session.commit()
        except LookupError:
            return False
        return True
    
    
# 创建博文类
class Blog(Base.Model):
    __tablename__ = 'blog'
    id = Column(Integer,primary_key=True,autoincrement=True)
    author_id = Column(Integer,ForeignKey("user.id"),nullable=True)
    created = Column(TIMESTAMP,nullable=True,default=Base.func.now())
    title = Column(String(50),nullable=True)
    body = Column(Text,nullable=True)
    
    # 根据用户的id来获取post
    @classmethod
    def read_by_authorId(cls,author_id):
        return cls.query.filter_by(id=author_id).first()
    
    # 根据博文id来获取对应的内容
    @classmethod
    def read_by_blogId(cls,blog_id):
        return cls.query.filter_by(id=blog_id).first()
    
    # 创建博文
    @classmethod
    def create(cls,author_id,title,body):
        blog = cls(author_id=author_id,title=title,body=body)
        try:
            Base.session.add(blog)
            Base.session.commit()
        except IntegrityError:
            return None
        return blog
    
    # 更新博文内容
    def update(self,new_title,new_body):
        self.title = new_title
        self.body = new_body
        try:
            Base.session.merge(self)
            Base.session.commit()
        except LookupError:
            return False
        return True
    
    # 根据Id来删除博文
    @classmethod
    def delete_blog(cls,id):
        blog:Blog = cls.read_by_blogId(id)
        if blog:
            Base.session.delete(blog)
            Base.session.commit()
            return True
        return False
    
    
# 读取数据库中的所有博文
def read_all_blog():
    return list(Base.session.query(Blog,User).join(Blog,User.id == Blog.author_id).all())

标签:return,CRUD,博客,Base,2.3,password,True,id,cls
From: https://www.cnblogs.com/leo130-blogs/p/18179005

相关文章

  • 末路狂花钱迅雷BT完整下载[1.12GB/2.35GB/Mp4]4K高清[1080P已更新]
    《末路狂花钱》是一部由导演马丁·斯科塞斯执导,1987年上映的经典电影。该片以真实的故事为基础,讲述了华尔街投资银行的故事,深入揭示了贪婪、欲望和腐败在当时华尔街的蔓延。本文将从电影的拍摄背景、故事情节以及对当时时代的反映与现实意义等方面进行分析。 首先,......
  • Hexo搭建个人博客
    Hexo搭建个人博客1、Hexo框架介绍官网:https://hexo.io/zh-cn/docs/2、框架的本地安装与运行npminstallhexo-cli-ghexoinitblogcdblognpminstallhexoserver3、框架的基本结构与打包后的文件介绍目录结构生成静态网站的命令hexogeneratehexog生成好......
  • 项目冲刺——第 1 篇 Scrum 冲刺博客
    作业所属课程所属课程作业要求作业要求作业目标敏捷开发前的安排一、各个成员在Alpha阶段认领的任务二、明日各个成员的任务安排成员任务肖杨、梁丽贤搭建前端开发框架黄诃华、欧文杰编写数据库姚佳如、李慧娣不断根据需求完善功能设计,......
  • 博客分类
    题解题解:AT_abc176_e[ABC176E]Bomber题解:AT_arc175_b[ARC175B]ParenthesisArrangemenAT_arc174_a[ARC174A]AMultiply题解AT_arc174_b[ARC174B]BoughtReview题解题解:AT_abc345_c[ABC345C]OneTimeSwapAT_arc175_a[ARC175A]SpoonTakingProblem题解无聊......
  • 博客美化
    目录参考链接页面定制css代码页首HTML代码页脚HTML代码其他设置参考链接awescnb自己部署皮肤文件页面定制css代码#loading{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999;background-color:#f4f5f5;pointer-events:none;}.loader-inner{will-change:tr......
  • Selenium自动化测试——个人博客系统
    fromseleniumimportwebdriverfromselenium.common.exceptionsimportTimeoutExceptionfromselenium.webdriver.common.byimportByfromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdri......
  • 腾讯公益赛个人冲刺博客10(2024.5.6)
    今天测试多人联机整体效果    ......
  • 腾讯公益赛个人冲刺博客7(2024.5.1)
    今天处理sos的定位功能,但自动定位功能不稳定,需要手动定位importandroid.Manifest;importandroid.content.pm.PackageManager;importandroid.os.Bundle;importandroid.widget.Toast;importandroidx.annotation.NonNull;importandroidx.appcompat.app.AppCompatActivit......
  • 腾讯公益赛个人冲刺博客2(2024.4.24)
    登录注册页面,问题暂无,明天做帮扶的第一个界面<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.andro......
  • 腾讯公益赛个人冲刺博客3(2024.4.25)
    今天做了帮扶功能的添加界面的雏形,以后可能还需要完善问题:一开始在想用不用网格布局,后来结合着改了一下明天做后端<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android......