当前位置: 首页 > article >正文

Qt之QDjango-db的简单使用

QDjango是一款由C++编写、依托于Qt库的Web开发框架,其设计理念受到了广受欢迎的Python框架Django的影响。这个项目旨在提供一个高效、灵活且易于使用的工具集,帮助开发者构建高质量的Web应用。其项目地址: https://gitcode.com/gh_mirrors/qd/qdjango,项目结构中存在db和http两部分,db为Qt的ORM实现,该模块包装一下可以作为简单的ORM库使用。
QDjango
如果项目中不想SQL语句写的到处都是,一个简单ORM库还是有必要的,同时也能避免依赖某一种数据库。以下工程为简单包装QDjango-db的简单实现。当然个人不建议使用该模块,主要QDjango已经很久不维护了,可以使用ODB来做相同的工作。
在这里插入图片描述

// 以下为QDjango-db的简单包装
    // 创建
    template<typename T>
    bool createHandle() {
        QDjango::registerModel<T>();
        return QDjango::createTables();
    }
    // 增加
    void addHandle(std::function<void()> f) { f();}
    // 删除
    void delHandle(std::function<void()> f) { f();}
    // 更改
    template<typename T>
    bool modifyHandle(const QVariantMap &fields) {
        return QDjangoQuerySet<T>().update(fields);
    }
    // 查询:不能嵌套查询,只能简单查询,复杂的可以研究QDjangoQuerySet类
    template<typename T>
    T* selectHandle(const QStringList& slParam, QDjangoWhere::Operation op) {
        Q_ASSERT(slParam.size() == 2);
        return QDjangoQuerySet<T>().get(QDjangoWhere(slParam[0], op, slParam[1]));
    }
    // 清表
    template<typename T>
    bool clearHandle() {
        return QDjangoQuerySet<T>().remove();
    }
    // 删表
    bool dropHandle() {
        return QDjango::dropTables();
    }
class User : public QDjangoModel
{
    Q_OBJECT
    Q_PROPERTY(QString username READ username WRITE setUsername)
    Q_PROPERTY(QString first_name READ firstName WRITE setFirstName)
    Q_PROPERTY(QString last_name READ lastName WRITE setLastName)
    Q_PROPERTY(QString email READ email WRITE setEmail)
    Q_PROPERTY(QString password READ password WRITE setPassword)
    Q_PROPERTY(bool is_active READ isActive WRITE setIsActive)
    Q_PROPERTY(bool is_staff READ isStaff WRITE setIsStaff)
    Q_PROPERTY(bool is_superuser READ isSuperUser WRITE setIsSuperUser)
    Q_PROPERTY(QDateTime date_joined READ dateJoined WRITE setDateJoined)
    Q_PROPERTY(QDateTime last_login READ lastLogin WRITE setLastLogin)

    Q_CLASSINFO("username", "max_length=30")
    Q_CLASSINFO("first_name", "max_length=30")
    Q_CLASSINFO("last_name", "max_length=30")
    Q_CLASSINFO("password", "max_length=128")
public:
    User(QObject *parent = 0);

    QString username() const;
    void setUsername(const QString &username);

    QString firstName() const;
    void setFirstName(const QString &firstName);

    QString lastName() const;
    void setLastName(const QString &lastName);

    QString email() const;
    void setEmail(const QString &email);

    QString password() const;
    void setPassword(const QString &password);

    // flags
    bool isActive() const;
    void setIsActive(bool isActive);

    bool isStaff() const;
    void setIsStaff(bool isStaff);

    bool isSuperUser() const;
    void setIsSuperUser(bool isSuperUser);
    
    // dates
    QDateTime dateJoined() const;
    void setDateJoined(const QDateTime &dateJoined);
    
    QDateTime lastLogin() const;
    void setLastLogin(const QDateTime &lastLogin);
private:
    QString m_username;
    QString m_firstName;
    QString m_lastName;
    QString m_email;
    QString m_password;
    bool m_isActive;
    bool m_isStaff;
    bool m_isSuperUser;
    QDateTime m_dateJoined;
    QDateTime m_lastLogin;
};
    if (qDjangoHandle::getSingleInstance().initialiseDatabase())
    {
        if (qDjangoHandle::getSingleInstance().createHandle<User>()) {
            // add
            qDjangoHandle::getSingleInstance().addHandle([&](){
                User user;
                user.setUsername("root");
                user.setFirstName("Li");
                user.setLastName("si");
                user.setPassword("1234");
                if (!user.save()) {
                    qDebug() << "save failed";
                }
            });
            // modify
            QVariantMap vmap;
            vmap["username"] = "root1";
            qDjangoHandle::getSingleInstance().modifyHandle<User>(vmap);
            // query
            QStringList slCondition;
            slCondition << "username" << "root1";
            User* p = qDjangoHandle::getSingleInstance().selectHandle<User>(slCondition, QDjangoWhere::Equals);
            if (p != nullptr)
                qDebug() << p->firstName() << p->lastName();
        }
    }

http://www.kler.cn/a/512879.html

相关文章:

  • Golang 中强大的重试机制,解决瞬态错误
  • 【深度学习项目】语义分割-FCN网络(原理、网络架构、基于Pytorch实现FCN网络)
  • 力扣11-最后一个单词的长度
  • pytest+playwright落地实战大纲
  • 基于Python的多元医疗知识图谱构建与应用研究(上)
  • HTML学习笔记(4)
  • 三格电子——MODBUS TCP 转 CANOpen 协议网关
  • 网络通信---MCU移植LWIP
  • 从零开始:使用 Brain.js 创建你的第一个神经网络(一)
  • Redis - 通用命令
  • Spring Boot 整合 PageHelper 实现分页功能
  • 线程池遇到未处理的异常会崩溃吗?
  • Redis的Windows版本安装以及可视化工具
  • PHP代码审计学习01
  • Github 2025-01-20 开源项目周报 Top15
  • Docker:基于自制openjdk8镜像 or 官方openjdk8镜像,制作tomcat镜像
  • Linux 时间操作详解
  • 什么是馈线自动化(FA)?其优点是什么?本文给出答案
  • 14,c++——继承
  • VSCode 使用默认profile打开文件
  • SpringBoot配置文件高级用法实战
  • RabbitMQ使用随笔
  • C语言勘破之路-最终篇 —— 预处理(上)
  • 高质量编程 性能优化学习笔记
  • redis-redission的加锁源码与看门狗机制
  • 【人工智能数学基础—微积分】深入详解梯度与梯度下降:掌握梯度下降法及其变种及模型参数的优化