2020.6.24 Celery

发布于 2020-06-24  66 次阅读


Table of Contents

  • # 创建一个实例
    
    celery = Celery()
    
    # 导入配置文件 包名.文件名
    
    celery_app.config_from_object("celery_tasks.config")
    
    # 导入任务
    
    celery_app.autodiscover_tasks("celery_tasks.sms")

  • 3.在包中创建一个配置文件,用来存放队列
    • broker_url = 'redis://192.168.1.103/6'

  • 4.在包中创建一个包(存放任务)
    • 在新创建的包中,存放任务tasks.py
    • @celery_app.task(name="send_sms")
      
      #使用装饰器,来装饰一个函数作为任务
      
      def send_sms_code(mobile, sms_code):
        pass

  • 5.开启Celery服务器
    • 在命令行中: celery -A celery_tasks.main worker -l info
      • -A 是任务包名
      • worker 自动创建进程
      • -l 是日志级别
      • 需要在celery_tasks目录上执行
  • 6.调用Celery开始生产任务
    • 导入tasks中的函数(被装饰器装饰的)
    • 函数.delay(传递参数)
  • 7.文档
  • 生产者消费者设计模式

    • 生产者
    • 中间人(任务队列)
    • 消费者
  • Django 用户登录重写authenticate步骤

    • 作用:
      • 可以实现用户名和手机号共同登录
    • 实现:
      • 定义utils文件,定义一个类,继承ModelBackend
      • 重写authenticate方法,在里面判断传入参数类型,并调用方法,验证密码
      • 在settings文件中定义变量AUTHENTICATION_BACKENDS = [‘’]
      • 列表中填写重写authenticate的类(包括包名)
      • 然后直接调用authenticate方法就可以
  • JInja2 使用

    • 1.配置settings文件的TEMPLATES
      • # 之前的模板配置最好注释,可能还需要补到后面
        
        TEMPLATES = [
            {
                'BACKEND': 'django.template.backends.jinja2.Jinja2',
                'DIRS': [os.path.join(BASE_DIR, "templates")],
                'APP_DIRS': True,
                'OPTIONS': {
                    'context_processors': [
                        'django.template.context_processors.debug',
                        'django.template.context_processors.request',
                        'django.contrib.auth.context_processors.auth',
                        'django.contrib.messages.context_processors.messages',
                    ],
                  # 需要添加文件 文件是扩展jinja2的功能
                    'environment': 'meiduo.utils.jinja2_env.jinja2_environment',
                },
            },
        ]
        
        
        # 文件用于environment 包名:'meiduo.utils.jinja2_env.jinja2_environment'
        
        def jinja2_environment(**options):
            env = Environment(**options)
            env.globals.update({
                'static': staticfiles_storage.url,
                'url': reverse,
            })
            return env

    • http://docs.jinkan.org/docs/jinja2/
  • LoginRequiredMixin

    • 用来提供登录状态验证,
      • 没有登录跳转登录链接,
      • 登陆了则进行后续操作
    • 两个重要的参数
      • LOGIN_URL = '/login/' 在settings中定义,或者在子类中定义long_url
      • redirect_field_name 默认是next ,从哪来,回哪去(查询参数中保存了地址)
  • 4.扩展延伸知识

    • 退出登录时候 django执行了什么

      • 清除session中存放的值
      • Session使用
        • session是加密的,比cookie安全
        • session也可以叫会话保持,在建立在cookie之上的
          • sessionid中存放了加密的字符串,用来辨别用户的身份
      • django使用session
    • set_cookie执行了什么?

      • 头文件中,设置setcookie
      • 1、name 必需。规定cookie的名称。
      • 2、value 必需。规定cookie的值。
      • 3、expire 可选。规定cookie的有效时间
      • 4、path 可选。
        • 规定cookie的服务器路径,浏览器在发送cookie时只会发送对应路径及祖先路径的cookie,如cookieA设置在根下(path:/),cookieB设置在/dir/下,访问dir的请求会带着cookieB和cookieA,但访问根路径的请求只会带着cookieA
      • 5、domain 可选。
        • 规定cookie的域名。只能设置为当前域或当前域的上级域。例如,一个在a.b.com的页面,可以设置为a.b.com或.b.com 。如果设置为.b.com的话,那么在其它子域中也能访问到。
      • 6.secure 可选。
        • 规定是否通过安全的HTTPS连接来传输cookie。其值为0或1,如果值为1,则cookie只能在https连接上有效,默认值为0表示cookie在http和https连接上都有效

        7、httponly 设置成true,

        ​ cookie仅通过http协议访问。意思就是cookie无法通过类似JavaScript这样的脚本语言访问。要有效的减少xss攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议,PHP5.2.0中添加。bool值true和false

    • 优化一些django的登录细节

    • Django session的一些设置

      • 为什么使用session

        • -解决cookie不安全的问题,
        • -存在服务器上的键值对 {'sdaf随机字符串':{name:lqz,pwd:123}} (返回给浏览器时,把随机字符串返还,这样就保证了信息的安全性)
        • -用session必须跟cookie连用
      • 配置session

        • settings文件中的一些配置

          • SESSION_COOKIE_NAME = "sessionid"
            • Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)

          • SESSION_COOKIE_PATH = "/"
            • Session的cookie保存的路径(默认)
          • SESSION_COOKIE_DOMAIN = None
            • Session的cookie保存的域名(默认)
          • SESSION_COOKIE_SECURE = False
            • 是否Https传输cookie(默认)
          • SESSION_COOKIE_HTTPONLY = True
            • 是否Session的cookie只支持http传输(默认)
          • SESSION_COOKIE_AGE = 1209600
            • Session的cookie失效日期(2周)(默认)
          • SESSION_EXPIRE_AT_BROWSER_CLOSE = False
            • 是否关闭浏览器使得Session过期(默认)
          • SESSION_SAVE_EVERY_REQUEST = False
            • 是否每次请求都保存Session,默认修改之后才保存(默认)
        • session的增删改查

          • 增 request.session[‘key’]=0,request.session.setdefault(‘key’,123)
          • 删 del request.session[‘key’]
          • 改 request.session[‘key’]=1
          • 查 request.session.get(‘key’)
        • session所有键值对

          • keys(),values(),items(),tierkeys(),itervalues(),iteritems()
        • 清除session

          • request.session.clear_expired() 清理小于当前日期的session
          • request.session.exists(‘sessionid’) 判断是否存在
          • request.session.delete(‘sessionid’)指定的session所有数据删除
          • request.session.clear() 删除所有session
        • 设置session的缓存

          • 缓存引擎 SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
          • SESSION_CACHE_ALIAS = 'default'
            • 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
    • Djaogo Cookie的一些细节

      • django中cookie的使用方法

        • response设置cookie
          • set_cookie(key,value)
        • request取cookie
          • request.COOKIE.get(‘key’)
        • response 删除Cookie
          • response.delete_cookie(‘key’)
        • cookie加盐(salt 需要用到解密)
          • set_signed_cookie(‘name’,’lqz’,salt=’123’)
        • max_age超时时间(秒)
          • set_cookie(‘key’,’value’,max_age=6)
      • cookie的一些参数

        • path=‘/’ 设置一个url ,只有访问这个url才携带cookie
        • domain 设置一个域名,只有这个域名 cookie才有效
        • secure=False 默认为假,True则是https传输
        • httponly=True 只能https传输,JavaScript无法获取(不绝对)
        • Max Age cookie的失效时间

    5.知识内容个人梳理

    6.今天都复习了之前的什么内容