zoukankan      html  css  js  c++  java
  • Django 知识点小记

    版本: Django2.x

    记一下平时写项目过程中遇到的点

    创建 Django 项目

    先进入到你想要创建 project 目录下,执行命令

    django-admin startproject projectname

    不报错即可,创建的文件结构为

    创建apps

    在project目录中执行

    django-admin startapp appname

    ORM对某个字段模糊搜索

    写 filter 的时候字段名后面加上 __icontains 代表模糊搜索且不区分大小写

    __contains 代表区分大小写的模糊搜索

    例如

    # 对name字段进行不区分大小写模糊搜索
    xx.filter(name__icontains=value).xx
    # 对name字段进行区分大小写的模糊搜索
    xx.filter(name__contains=value).xx

    ORM查询中的动态字段

    如有这样的需求,某个查询是有多个参数,而参数可以有多个值也可以没有值.后端该怎么解决呢?

    看有人套 if else 来判断出所有不停的情况,如果一两个可变字段还好,有多个的话代码该有多少

    我们可以利用 ORM 的filter参数可传 **kwargs 的特征来写出既满足需求又可维护可扩展的代码,例如:

    def search(**kwargs):
        '''
        查询组件
        : param **kwargs:
        : return querysite:
        '''
    
        # 本次ORM查询
        filter_kwargs = dict()
        
        # 因时间区间判断ORM需要指定不同的key所以分别判断
        # 指定开始/结束时间
        if (kwargs["start_time"] and kwargs["end_time"]):
            filter_kwargs["online_time__range"] = (kwargs["start_time"], kwargs["end_time"])
        # 指定开始时间
        elif kwargs["start_time"]:
            filter_kwargs["online_time__gt"] = kwargs["start_time"]
        # 指定结束时间
        elif kwargs["end_time"]:
            filter_kwargs["online_time__lte"] = kwargs["end_time"]
        
        # 普通字段
        # 有上/下线状态
        if kwargs["status"]:
            filter_kwargs["status"] = kwargs["status"]
        
        # 有IP,模糊匹配,不区分大小写
        if kwargs["ip"]:
            filter_kwargs["ip__icontains"] = kwargs["ip"]
    
        # 按online_time排序
        querysite = log.objects.filter(**filter_kwargs).order_by('-online_time') 
        return querysite

    利用filter的特征,我们没必要将其所有搭配情况写全,而是只对某个单一字段进行分别区分,打个比方,如果你传了ip字段,那么我就在filter中加上ip字段.

    然后将这个集合了当前查询的匹配字典,传入**kwargs会将字典打成 k=v 的形式传入, 达到同样的效果.

    如果字段要增加/删除/修改 则只需要修改该字段的判断即可

  • 相关阅读:
    Dubbo探索(七)
    Dubbo探索(六)
    Dubbo探索(五)
    Dubbo探索(四)
    Redis主节点内存占用过高
    修改RedHat 7.2 进程最大句柄数限制
    Linux 数据分析常用 shell命令
    流处理
    根域名服务器
    并发与并行(concurrency vs parallesim)
  • 原文地址:https://www.cnblogs.com/chnmig/p/10137954.html
Copyright © 2011-2022 走看看