2020.6.24 Celery

发布于 9 天前  23 次阅读


1.复习内容

2.灵感代办

3.学习内容

  • Celey 异步方案

    • 优点:

      • 效率非常高
      • 封装好了生产者消费者模型
    • 为什么使用celey

      • web应用中,有些应用需要长时间阻塞
      • 生产环境,需要一些定时任务
      • 同步完成的附加工作,可以异步完成,短信,邮件
    • Celery的组件

      • 16df7aa28e4bb159
      • Celery Beat :任务调度器,读取配置文件,周期执行任务
      • Celery Worker :消费者,执行任务(可以在多个服务器部署)
      • Broker:中间人,任务队列,消息代理,接收任务,发送任务
      • Producer:任务生产者,函数装饰器修饰
      • Result Backend:任务处理完成保存状态信息,Redis,MongoDb等等
    • Celery使用流程

      • 1.创建一个包,用来存放Celery代码
      • 2.在包中创建一个main.py 用来创建Celery实例
        • # 创建一个实例
          
          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.今天都复习了之前的什么内容


Ares个人进阶之路