django项目的交互和数据库的查询封装

django前后端调用及使用

简单的项目压缩包已放链接,下载下来自己玩吧!!!
在这里插入图片描述

为了更方便的查询把django数据库查询进行封装

新建函数XXX.py

# 当前项目的名称: DjangoMyPywelIo
# 新文件的名称: MySql_connection 
# 当前用户的登录名: enmonster
# 当前的系统日期: 2024/5/30 
# 当前系统时间:08:58
# @Software:PyCharm
# @Time : 2024/5/30 08:58 
# 年份:2024
# 月份:05
# 那天:30
# @Author : 彭升军
# @File : MySql_connection.py
from django.db import connection
from django.db.models import F
from django.db.models import Q


# Django ORM 查询,obj为表对象,sql不传查询所有
def ObjOrmAll(obj, kwargs=None):
    if kwargs:
        print("根据条件查询")
        return obj.objects.filter(**kwargs)
    else:
        print("获取所有对象")
        return obj.objects.all()


# Django Raw SQL 查询, 使用自带的sql原生查询
def ObjRaw(obj, sql):
    return obj.objects.raw(sql)


# 使用原生SQL执行左连接查询,最原始的
def execute_custom_join(query):
    with connection.cursor() as cursor:
        cursor.execute(query)
        return cursor.fetchall()


# 使用原生SQL执行左连接查询,封装成JSON
def query_one_dict(sql, params=None):
    """    查询一个结果返回字典类型数据
        :param sql:
        :param params:
        :return:
    """

    with connection.cursor() as cursor:
        if params:
            cursor.execute(sql, params=params)
        else:
            cursor.execute(sql)
            col_names = [desc[0] for desc in cursor.description]
            row = cursor.fetchone()
            tMap = dict(zip(col_names, row))
    return tMap


# 使用原生SQL执行左连接查询,封装成JSON,多个返回的是一个列表
def query_all_dict(sql, params=None):
    """ 查询所有结果返回字典类型数据
        :param sql:
        :param params:
        :return:
    """
    with connection.cursor() as cursor:
        if params:
            cursor.execute(sql, params=params)
        else:
            cursor.execute(sql)
            col_names = [desc[0] for desc in cursor.description]
            row = cursor.fetchall()
            rowList = []
            for queryList in row:
                tMap = dict(zip(col_names, queryList))
                rowList.append(tMap)
    return rowList


# Django F 表达式 用与计算,没封装采用原生SQL
# def ObjFilter(obj, **args):
#     obj.objects.filter(**args).update()


# Django Q 表达式
def ObjFilterQ(obj, **kwargs):
    print("Django Q 表达式")
    q = Q(**kwargs)
    results = obj.objects.filter(q)
    return results

  • 如何调用

from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
import datetime
from .public.MySql_connection import *
from .models import *


def login(request):
    return render(request, "login.html")


def index(request):
    query = """
                 SELECT DISTINCT(a.id), a.`name` as Cname,b.`name` as Bname FROM userdb.polls_menu AS a 
                 JOIN polls_menu AS b ON a.id=b.parent_id;
                  """
    tt = query_all_dict(query)# 引用封装查询语句
    context = {"obj": tt, 'title': "首页的title", 'content': "首页的内容"}
    return render(request, "index1.html", context)


@csrf_exempt
@require_http_methods(["POST"])
def register(request):
    try:
        if request.method == 'POST':
            name = request.POST.get('UserName')
            Pwd = request.POST.get('UserPwd')
            UserIPhone = request.POST.get('UserIPhone')
            UserEmail = request.POST.get('UserEmail')
            print(name, Pwd, UserIPhone, UserEmail)
            allIPhone = User.objects.filter(UserIPhone=UserIPhone)
            allUserName = User.objects.filter(UserName=name)
            if allIPhone or allUserName:
                context = {"msg": f" 姓名:{name}{UserIPhone} 手机号 已存在,请换更改信息注册"}
                return render(request, "eer.html", context)
            else:
                my_model = User()
                my_model.UserName = name
                my_model.UserPwd = Pwd
                my_model.UserEmail = UserEmail
                my_model.UserIPhone = UserIPhone
                my_model.UserGmtCreate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                my_model.UserGmtModify = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                my_model.save()
                return render(request, "register.html")
        else:
            return render(request, "eer.html")
    except Exception as e:
        contE = {"key": e}
        return render(request, "eer.html", contE)


def company(request):
    context = {'title': "公司title", 'content': "公司的内容"}
    return render(request, 'company_front.html', context)


def school(request):
    sql1 = """
        SELECT DISTINCT(a.id), a.`name` as Xname  FROM userdb.polls_menu AS a WHERE a.parent_id=0;
        """
    sql = """
    SELECT a.id,b.id, a.`name` as Cname,b.`name` Bname FROM userdb.polls_menu AS a 
    JOIN polls_menu AS b ON a.id=b.parent_id;
    """

    tt = ObjRaw(Menu, sql1)
    cc = ObjRaw(Menu, sql)
    print(cc)
    context = {"obj1": tt, "obj": cc, 'title': "首页的title", 'content': "首页的内容"}
    return render(request, 'school_front.html', context)


def index2(request):
    # context = {}
    query = """
               SELECT DISTINCT(a.id), a.`name` as Cname,b.`name` as Bname FROM userdb.polls_menu AS a 
               JOIN polls_menu AS b ON a.id=b.parent_id;
                """
    tt = query_all_dict(query)
    print(tt)
    context = {"obj": tt, 'title': "首页的title", 'content': "首页的内容"}
    return render(request, 'index.html', context)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值