zoukankan      html  css  js  c++  java
  • crm的知识点整理

    '''
    # 1. 通过ChangeList封装好多数据
    # 2. 销售中公共资源:Q查询,3天 15天
        from django.db.models import F,Q
        F 使用查询条件的值,专门取对象中某列值的操作
        models.User.objects.update(age=F('age')+1)
        Q对象常用于实现搜索功能,常配合双下划綫查询使用
        | is or, & is and ~ 表示否定
        q1=models.Book.objects.filter(Q(title__startswith='P')).all()
        Q对象组合使用可以产生一个新对象
        Q(title__startswith='P') | ~Q(pub_date__year=2005)
    
        Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。
         Book.objects.get(
                Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
                title__startswith='P')
    # 3. 使用yield实现
    #     - 生成器函数,对数据进行加工处理
    #     - __iter__和yield配合
    # 4. 获取Model类中的字段对from django.db.models import F应的对象
    #     class Foo(model.Model):
    #         xx = models.CharField()
    #
    #     Foo.get_field('xx')
    #
    # 5. 模糊搜索功能
    #   使用Q方法
    # 6. Type创建类
    #   type时所有元类的父亲
        object是type(object的类型是type),type也是object(type继承自object)
        >>> isinstance(object, type)
        True
        >>> isinstance(type, object)
        True
        在python中一切皆object,所有对象都是从object继承而来的,type也是object,而object的type是type
        >>> type.__base__
        <type 'object'>
        >>> type(object)
        <type 'type'>
    
    
        1、type是一切type的类型
        2、object是所有对象的基类,type也继承自object
        3、object的type是type
    
    
    
        去掉object所有对象都不能用了,而去掉type,所有对象还是可以正常运作的,只是没有一个东西标识他的类型了
    # 7. 自动派单
    #     - 原来在内存中实现,问题:重启和多进程时,都有问题。
    #     - redis
    #         - 状态
    #         - 原来数据(权重表 权重和个数)
    #         - pop数据
    # 8. 使用 list_diplay配置
    #     list_display = [函数名,]
    #
    # 9. reverse反向生成URL
        #使用方法:
        def index(request):
        from django.urls import reverse
        test_url = reverse('xx')
        print(test_url)
        return HttpResponse("进入index")
    
        def text(requext):
            return HttpResponse("进入text")
    
        urlpatterns = [
            url(r'^index/', index,),
            url(r'^text/dasd/asd/asd/sad/asd/as/d', text,name='xx'),
        ]
    # 10. 模板
    #   为了减少重复代码而使用模板
        命名为base.html,这个页面主要放公用部分的代码,各个子页面都可以继承这个页面的样式。
        <!DOCTYPE html>
        <html lang="en">
        <head>
           <meta charset="UTF-8">
           <title>{% block title %}首页{% endblock %}</title>
           {% block js %} {% endblock %}
           {% block css %}  {% endblock %}
        </head>
        <body>
           {% block content %}{% endblock %}
        </body>
        </html>
    
        如下所示,{% extends ‘base.html’ %}作为基础模板,必须放在第一行才可以识别。
        {% block %}这个标签,告诉模板引擎,子模板可以重载这些
        {% include %}允许模板中包含其他模板。
        注意css和js等静态文件,是和html不同的识别方式。
        {% extends 'base.html' %}
    
        <!-- 该页面不允许出现js以及css代码,content代码可直接写在本文件中,下面只是content的实例代码 -->
        {% block title %}
           <!-- 此处写页面标题 -->
        {% endblock %}
    
        {% block js %}
            <!-- 此处填充js链接 -->
            <script type="text/javascript" src="..."></script>
        {% endblock %}
    
        {% block css %}
            <!-- 此处填充css链接 -->
        {% endblock %}
    
        {% block content %}
            <!-- 此处填充页面主体内容 -->
            {% include 'taskApp/cjjdglContent.html' %}
        {% endblock %}
    # 11. ready方法定制起始文件
    #     - 文件导入实现单例模式
    # 12. inclusion_tag
    #   一种比较普遍的tag类型是只是渲染其它模块显示下内容,这样的类型叫做Inclusion Tag。
        @register.inclusion_tag('link.html', takes_context=True)
        def jump_link(context):
            return {
                'link': context['home_link'],
                'title': context['home_title'],
        }
    # 13. 中间件的使用
    #   什么是 middleware?
        Middlewares 是修改 Django request 或者 response 对象的钩子.
    
        什么时候使用middleware
        1.多个网页的登录权限认证时
        2.如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。
        3.可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。
    
        Django还有一些默认的middleware比如:
        AuthenticationMiddleware
        还有更多的都可以在shting中配置
    
        使用middleware时应该记住的东西!
        middleware的顺序非常重要
        一个middleware只需要继承object类
        一个middleware可以实现process_request(方法)
    
        给两个middleware添加process_request方法
        class AnotherMiddleware(object):
            def process_request(self, request):
                print "Another middleware executed"
    
            def process_response(self, request, response):
                print "AnotherMiddleware process_response executed"
                return response
    
        class BookMiddleware(object):
            def process_request(self, request):
                print "Middleware executed"
                print request.user
                return HttpResponse("some response")
                #self._start = time.time()
    
            def process_response(self, request, response):
                print "BookMiddleware process_response executed"
                return response
    
    
    
    
    # 15. importlib + getattr
        ######setting.py#####
        MESSAGE_CLASSES = [
            'utils.message.email.Email',
            'utils.message.msg.Msg',
            'utils.message.wx.WeChat',
            'utils.message.dingding.DingDing',
        ]
        ##.py
        import importlib #动态导入模块
        from django.conf import settings
        for cls_path in settings.MESSAGE_CLASSES:
            # cls_path是字符串
            module_path,class_name = cls_path.rsplit('.',maxsplit=1)
            m = importlib.import_module(module_path)
            obj = getattr(m,class_name)()
            obj.send(subject,body,to,name,)
    #
    # 16. FilterOption,lambda表达式
        #lanmbda是一个匿名函数
        它可以通过传给reduce中的函数(必须是二元函数)
        依次对数据集中的数据进行操作。
        from functools import reduce
        list=[i for i in range(1,101)]
        a=reduce(lambda x,y:x+y,list)
        print(a)
    # 17. QueryDict
    #     - 原条件的保留
    #     - filter
    # 18. ModelForm
        #from django.forms import Form,ModelForm,fields,widgets as wd
        class QueModelForm(ModelForm):
            class Meta:
                model=models.Question  #
                fields=['caption','tp']
                error_messages = {
                    'caption':{'required':'名称不等为空','invalid':'格式错误'},
                    'tp':{'required':'名称不等为空','invalid':'格式错误'}
                }
                widgets = {
                    'caption':wd.TextInput(attrs={'class':'form-control',}),
                    # 'tp':wd.TextInput(attrs={'class':'form-control'})
                }
    
        class UserTypeModeForm(ModelForm):
            title = fields.CharField(max_length=6,required=True,widget=wd.Textarea())
    
            class Meta:
                model = models.UserType
                fields = "__all__"
    
                error_messages = {
                    'title':{'required':'名称不能为空','invalid':'格式错误'}
                }
                widgets = {
                    'title':wd.TextInput(attrs={'class':'c1'})
                }
    
    # 19. 面向对象的 @property  @classmethod
        #staticmethod和classmethod的作用:
        一般来说,要使用某个类的方法,需要先实例化一个对象在调用方法。
        而使用@staticmethod或classmethod,就可以不需要实例化,直接类名.方法名来调用。
        这有利于组织代码,把某些应该属于某个类的函数给放到那个类里,同时有利于代码整洁
    
        区别:
        @staticmethod不需要表示自身对象的self和自身类的cla参数,就跟使用函数一样
        @classmethod也不需要self参数,但第一个参数需要表示自身类的cls参数
    
        class A():
            cap='A'
            def foo(self):
                print('B')
            @staticmethod
            def static_cap():
                print('static')
                print(A.cap)
                A().foo()
            @classmethod
            def class_foo(cls):
                print('class')
                print(cls.cap)
                cls().foo()
    
        print(A.cap)
        # A.static_cap()
        # A.class_foo()
    
        @property:方法调用时不用加括号
    # 20. mark_safe
        何谓转义?就是把html语言的关键字过滤掉。例如,<div>就是html的关键字,如果要在html页面上呈现<div>,其源代码就必须是&lt;div&gt;
        PS:转义其实就是把HTML代码给转换成HTML实体了!
        默认情况下,django自动为开发者提供escape功能,即在html代码render之前,先进行转义,然后再呈现出来。
        这样的话,我们如果想输出一个链接,被转义之后,可能就无法得到我们想要的结果。
        1.使用mark_safe函数标记后,django将不再对该函数的内容进行转义
        2.在template中 可以使用 {{ data|safe }}
        3.在自定义模板语法中可以:把is_safe属性设置为Ture
        @register.filter
    
        def myfilter(value):
    
            return value
    
        myfilter.is_safe = True
    #
    # 21. 抽象方法抽象类+raise Im...
        ##base.py
        #####方法一######
        from abc import ABCMeta
        from abc import abstractmethod
    
        class BaseMessage(metaclass=ABCMeta):
    
            @abstractmethod
            def send(self,subject,body,to,name):
                pass
    
        ########方法二#######
        class BaseMessage(object):
            def send(self, subject, body, to, name):
                raise NotImplementedError('未实现send方法')
    
        #######dingding.py#########
        from .base import BaseMessage
    
        class DingDing(BaseMessage):
            def __init__(self):
                pass
    
            def send(self,subject,body,to,name):
                print('钉钉消息发送成功')
    # 22. 组件中的装饰器,实现self.request = request
    #
    # 23. 自执行函数
    #     (function(arg){
    #
    #
    #     })('sf')
    #
    #
    # 24. URL的钩子函数
    #
    # 25. 多继承
    #
    # 26. 批量导入,xlrd
        #table = data.sheets()[0]
        table = data.sheet_by_index(0)
        print(table)
        #获取正行或是整列的值
        con = table.row_values(0)#[356.0, '星际牛仔', 'カウボーイビバップ', '
                             26话 /  1998年10月23日 / 渡辺信一郎 / 矢立肇 / 川元利浩                    ', 9.1, '(4021人评分)']
        con = table.col_values(2)#['cname', '星际牛仔', '攻壳机动队 S.A.C. 2nd GIG', '攻壳机动队 STAND ALONE COMPLEX', '新世纪福音战士', ]
        print(con)
        #获取行数与列数
        nrows = table.nrows
        print(nrows)#673
        ncols = table.ncols
        print(ncols)#6
    
        #循环行列表数据
        # for i in range(nrows):
        #     print(table.row_values(i))
    
        #循环列列表数据
        for i in range(ncols):
            print(table.col_values(i))
        #单元格索引
        val = table.cell(5,5).value
    
        # print(val2)
    # 27. redis连接池
    #   为什么使用Redis连接池?
        首先Redis也是一种数据库,它基于C/S模式,因此如果需要使用必须建立连接,稍微熟悉网络的人应该都清楚地知道为什么需要建立连接,
        C/S模式本身就是一种远程通信的交互模式,因此Redis服务器可以单独作为一个数据库服务器来独立存在。
    
        import redis
        conn = redis.Redis(host='192.168.20.150',port=6379,password='')
        # conn.set('ldq_k1','v1')
        k1 = conn.get('ldq_k1')
        print(k1)#b'v1'
        # conn.rpush('ldq_k2',*[1,2,3,4,5,6])
        k2= conn.rpop('ldq_k2')
        print(k2)
    # 28. 工厂模式
    #     settings.py
    #         MSG_PATH = "path.Email"
    #
    #
    #     class XXFactory(object):
    #         @classmethod
    #         def get_obj(cls):
    #             settings.MSG_PATH
    #             # rsplit
    #             # importlib
    #             # getattr
    #             return obj
    #
    #     class Email(object):
    #         def send ...
    #
    #     class WeChat(object):
    #         def send ...
    #
    #     class Msg(object):
    #         def send ...
    #
    #
    # 29. Models类中自定义save方法
        借鉴了admin重写了save方法
        from django.contrib import admin
        class ArticleAdmin(admin.ModelAdmin):
            def save_model(self, request, obj, form, change):
                # 自定义操作
                obj.save()
    
        defsave(self,*args,**kwargs):
            do_something()
            super(YourModel, self).save(*args,**kwargs)  # Call the "real" save() method.
            do_something_else()
    #
    # 30. django admin中注册models时候
    #     from django.contrib import admin
    #
    #     from . import models
    #
    #     # 方式一
    #     class UserConfig(admin.ModelAdmin):
    #         pass
    #
    #     admin.site.register(models.UserInfo,UserConfig)
    #
    #     # 方式二
    #     @admin.register(models.UserInfo)
    #     class UserConfig(admin.ModelAdmin):
    #         pass
    #
    # 31. 深浅拷贝
    
    '''
  • 相关阅读:
    使用 Redis 实现分布式锁(转载)
    使用Redis SETNX 命令实现分布式锁(转载)
    linux目录(转载)
    sleep函数作用(转)
    大数据量高并发的数据库优化(转)
    java获取request的url方法区别
    java获取request的头信息
    打分排序系统漫谈2
    打分排序系统漫谈1
    Tree
  • 原文地址:https://www.cnblogs.com/ldq1996/p/8205766.html
Copyright © 2011-2022 走看看