Python2—0905笔记

最后一个项目自动发现

启动项目

        导入对象

        自动发现应用

        拼接url

water.py

代码

import json

import string

from django.core.exceptions import ValidationError

from django.forms import ModelForm

from django.forms import Form

from django.forms import fields

from django.forms import widgets

from django.db.models import Q

from django.conf import settings

from django.utils.safestring import mark_safe

from django.core.urlresolvers import reverse

from django.conf.urls import url,include

from django.shortcuts import HttpResponse,render,redirect

from water.service import v1

from rbac import models

from utlis import jiami_class

from utlis import time_class

from utlis import arya_func

from utlis import webssh_class

from utlis.log_class import Logger

#主机

class LableConfig(v1.AryaConfig):

    list_display = \['name'\]

    # show_add = True

v1.site.register(models.Lable, LableConfig)

class MemoryConfig(v1.AryaConfig):

    list_display = \['size','width','locator','type'\]

    # show_add = True

v1.site.register(models.Memory, MemoryConfig)

class DiskConfig(v1.AryaConfig):

    list_display = \['path','size',\]

v1.site.register(models.Disk, DiskConfig)

class LoginConfig(v1.AryaConfig):

    def login\_pwd\_base(self,row=None,is_title=None):

        if is_title:

            return '登录密码'

        obj=models.Login.objects.filter(pk=row.id).first()

        ret=jiami\_class.jiami().base\_str\_decrypt(obj.login\_pwd)

        return ret

    list\_display = \['id','login\_name',login\_pwd\_base\]

    def add(self,req):

        '''

        传递self对象

        传递req

        传递 加密解密的 在前段页面中的关键字

        '''

        ret=arya\_func.core\_add(self,req,'login_pwd')

        self.\_log\_in\_db(req, url=self.add\_log_url,

                proj=self.mod, action='add', msg='add' + self.mod)

        return ret

    def change(self,req,nid):

        '''

        传递self对象

        传递req

        传递被修改者id

        传递 加密解密的 在前段页面中的关键字

        '''

        ret=arya\_func.core\_change(self,req,nid,'login_pwd')

        self.\_log\_in\_db(req, url=self.update\_log_url,

                proj=self.mod, action='update', msg='update' + self.mod)

        return ret

v1.site.register(models.Login, LoginConfig)

class OsConfig(v1.AryaConfig):

    list_display = \['name',\]

v1.site.register(models.Os, OsConfig)

class NetworkConfig(v1.AryaConfig):

    list\_display = \['ip\_address','mac_address'\]

\# v1.site.register(models.Network,NetworkConfig)

class HostConfig(v1.AryaConfig):

    show_ali=True

    _monitor = True

    #网页登录ssh开关

    # _webssh = True

    def detail\_view(self,row=None,is\_title=None):

        if is_title:

            return '详情'

        app=self.model\_class.\_meta.app_label

        mod=self.model\_class.\_meta.model_name

        \_str='water:%s\_%s_detail' %(app,mod)

        url=reverse(viewname=_str,args=(row.id,))

        result='<a href="{0}" class="btn btn-info">查看详情</a>'.format(url)

        return mark_safe(result)

    # def gouzi(self):

        #通过 钩子函数 增加可以解析的URL

        # return \[url('^(\\d+)/detail.html/', self.detail, name='%s_%s_detail' % (self.app, self.mod)),\]

    def detail(self,req,nid):

        if req.method=='GET':

            obj = models.Host.objects.filter(pk=nid).first()

        else:

            hostname=req.POST.get('hostname').strip().lstrip('主机名:')

            from client.bin.run import JG_info

            JG\_func = JG\_info.\_begin(no\_all_in=hostname)

            # print(JG_func)

            return HttpResponse(JG_func)

        return render(req, 'detail.html', locals())

    def disk(self,row=None,is_title=None):

        if is_title:

            return '磁盘'

        value\_list=models.Host.objects.filter(pk=row.id).values('disks\_\_size')

        ret_li=\[\]

        for value in value_list:

            ret\_li.append(value\['disks\_\_size'\])

        try:

            ret='+'.join(ret_li)

        except TypeError:

            ret = ''

        return ret

    def get\_model\_form(self):

        if self.model_f:

            return self.model_f

        class Dynamic(ModelForm):

            # def \_\_init\_\_(self, \*args, \*\*kwargs):

            #     super(Dynamic, self).\_\_init\_\_(\*args, \*\*kwargs)

                # print(self.base_fields.values())

                # print(self.base\_fields\['hostname'\].\_\_dict__)

                # print(self.base\_fields\['logining'\].\_\_dict__)

            loginname=fields.CharField(widget=widgets.Textarea(),label='登录用户')

            # #PasswordInput

            loginpwd=fields.CharField(widget=widgets.Textarea(),label='登录密码')

            # eth0\_network=fields.CharField(max\_length=32,error_messages=)

            class Meta:

                model=models.Host

                # fields='\_\_all\_\_'

                # exclude=\['logining'\]

                fields=\['hostname','ecsname','loginname','loginpwd',

                        'loginname','loginpwd','login_port','logining',

                        'cpu','lab','mem','speed','disks',

                        'eth1\_network','eth0\_network','sn','os',

                        'kernel','the_upper','source',

                        'state','remarks','state'

                        \]

                error_messages={

                    'eth0_network':{

                        'required': 'ip不能为空'

                    },

                }

                widgets={

                    'hostname': widgets.TextInput(attrs={'class': 'done'}),

                    'ecsname': widgets.TextInput(attrs={'class': 'done'}),

                    'login_port': widgets.TextInput(attrs={'class': 'done'}),

                    'cpu': widgets.TextInput(attrs={'class': 'done'}),

                    'mem': widgets.TextInput(attrs={'class': 'done', }),

                    'eth1_network': widgets.TextInput(attrs={'class': 'done',}),

                    'eth0_network': widgets.TextInput(attrs={'class': 'done', }),

                    'sn': widgets.TextInput(attrs={'class': 'done',}),

                    'speed': widgets.TextInput(attrs={'class': 'done', }),

                    'kernel': widgets.TextInput(attrs={'class': 'done', }),

                    'remarks': widgets.Textarea(attrs={'class': 'done', }),

                    'createtime': widgets.TextInput(attrs={'class': 'done', }),

                    'disks': widgets.SelectMultiple(attrs={'class': 'done', }),

                    'os': widgets.Select(attrs={'class': 'done', }),

                    'state': widgets.Select(attrs={'class': 'done',}),

                    # 'logining':widgets.SelectMultiple(attrs={'class':'displaynone'}) ,

                }

                # def \_\_init\_\_(self,\*args,\*\*kwargs):

                #     super(Dynamic, self).\_\_init\_\_(\*args,\*\*kwargs)

                #     self.base_fields\['logining'\].widget.attr.update({'display':'none'})

            def clean(self):

                login_li=\[\]

                user\_li=self.cleaned\_data\['loginname'\].strip().split('\\r\\n')

                pwd\_li=self.cleaned\_data\['loginpwd'\].strip().split('\\r\\n')

                if len(user\_li) != len(pwd\_li):

                    self.add_error('loginname',ValidationError('用户名密码数量不一致'))

                    return self.cleaned_data

                for line in range(len(user_li)):

                    jiami\_pwd = jiami\_class.jiami().base\_str\_encrypt(pwd_li\[line\])

                    login\_obj=models.Login.objects.filter(login\_name=user\_li\[line\],login\_pwd=jiami_pwd).first()

                    if not login_obj:

                        login\_obj=models.Login.objects.create(login\_name=user\_li\[line\], login\_pwd=jiami_pwd)

                    login\_li.append(login\_obj.id)

                self.cleaned\_data\['logining'\]=login\_li

                return self.cleaned_data

        return Dynamic

    def list(self,request):

        self.request=request

        search_q=request.GET.get('q')

        candition_q=Q()

        search\_list=self.aget.get\_search_list()

        if search\_list and search\_q:

            for search\_item in search\_list:

                temp_q=Q()

                temp\_q.children.append((search\_item,search_q))

                candition\_q.add(temp\_q,'OR')

        pteam\_obj=request.session.get(settings.PTEAM\_OBJ)

        if pteam_obj != 1:

            host\_list=request.session.get(settings.PERMISSION\_HOST)\['host'\]

            queryset=models.Host.objects.filter(candition\_q,pk\_\_in=host\_list).order\_by('-id')

        else:

            queryset=models.Host.objects.filter(candition\_q).order\_by('-id')

        data=v1.ChangeList(self, queryset)

        self.\_log\_in\_db(request, url=self.list\_log_url, proj=self.mod,

                    action='list', msg='list' + self.mod)

        return render(request,'list.html',{'data':data,'req':request})

    def change(self,req,nid):

        log_dic={'user':None,'pwd':None,'hero':None}

        logger=Logger(loglevel=1, logger="fox",num=1).getlog()

        dynamic\_form = self.get\_model_form()

        obj=self.model_class.objects.filter(id=nid).first()

        if req.method=='GET':

            form = dynamic_form(instance=obj)

            login\_name\_li=\[\]

            login\_pwd\_li=\[\]

            #剔除loginning中的多对多显示

            form.fields.pop('logining')

            ##拿出loginning中的多对多数据

            logining=form.initial.pop('logining')

            for login_item in logining:

                base\_str=jiami\_class.jiami().base\_str\_decrypt(login\_item.login\_pwd)

                login\_name\_li.append(login\_item.login\_name)

                login\_pwd\_li.append(base_str)

            #通过换行拼接

            \_loginname='\\r\\n'.join(login\_name_li)

            \_loginpwd='\\r\\n'.join(login\_pwd_li)

            form.initial\['loginname'\]=_loginname

            form.initial\['loginpwd'\]=_loginpwd

            log\_dic\['user'\]='\\t'.join(login\_name_li)

            log\_dic\['pwd'\]='\\t'.join(login\_pwd_li)

            logger.info('%s,%s' %(log\_dic\['user'\],log\_dic\['pwd'\]))

            return render(req,'edit.html',{'data':form,'req':req,'tag':True})

        else:

            form = dynamic_form(instance=obj,data=req.POST)

            if form.is_valid():

                form.save()

                log_dic\['hero'\]=req.session.get(settings.USER)

                logger.info('------------The above is %s modification',log_dic\['hero'\])

                self.\_log\_in\_db(req, url=self.update\_log_url,

                            proj=self.mod, action='update', msg='update' + self.mod)

                return redirect(self.jump.list_url)

            return render(req, 'edit.html', {'data': form,'req':req})

    #显示月租金

    def cost(self, row=None, is_title=None):

        if is_title:

            return '月租/元'

        obj = models.Host.objects.filter(pk=row.id).first()

        try:

            return obj.remarks

        except:

            return ''

    #监控

    def monitor(self, req, nid):

        if req.method == 'GET':

            start\_time,end\_time=time\_class.Time().ali\_def_monitor()

            obj = self.model_class.objects.filter(id=nid)

            monitor_obj=obj.first().hm.filter(

                # timestamp__gte='2018-08-10T06:49:58Z',

                # timestamp__lte='2018-08-10T06:54:58Z')

                timestamp\_\_gte=start\_time,

                timestamp\_\_lte=end\_time)

            #默认请求

            return render(req, 'monitor.html', locals())

        else:

            get_dic=req.POST

            if get_dic.get('tag'):

                #有条件

                pass

            else:

                #无条件

                obj_li=models.Host.objects.filter(id=nid)

            obj = self.model_class.objects.filter(id=nid).delete()

            self.site.\_log\_in\_db(req, url=self.site.delete\_log_url,

                            proj=self.site.mod, action='del', msg='del_' + self.site.mod)

            return redirect(self.jump.list_url)

    def add(self,req):

        dynamic\_form=self.get\_model_form()

        if req.method=='GET':

            form=dynamic_form()

            form.fields.pop('logining')

            # print(form.clean_logining())

            return render(req,'hosts/add.html',{'data':form,'req':req})

        else:

            form=dynamic_form(data=req.POST)

            if form.is_valid():

                form.save()

                self.\_log\_in\_db(req, url=self.add\_log_url,

                        proj=self.mod, action='add', msg='add' + self.mod)

                return redirect(self.jump.list_url)

            return render(req, 'hosts/add.html', {'data': form,'req':req})

    def app\_name(self,row=None,is\_title=None):

        if is_title:

            return '应用'

        obj = models.Host.objects.filter(pk=row.id).first()

        str='<a href="/water/rbac/app/list.html?k={0}">{1}</a>'

        #删除结尾数字

        ret=''

        for item in obj.apphost.all():

            ret+=str.format(item.name.rstrip(string.digits),item.name.rstrip(string.digits))

        return mark_safe(ret)

    list\_display = \['hostname',app\_name,'cpu','mem',disk,'eth1\_network','eth0\_network'\]

    # list\_display = \['hostname',app\_name,'cpu','mem',disk,'eth1\_network','eth0\_network'\]

    search\_list = \['eth1\_network\_\_contains','eth0\_network\_\_contains','hostname\_\_contains'\]

v1.site.register(models.Host, HostConfig)

class VpcNetConfig(v1.AryaConfig):

    list_display = \['title',\]

v1.site.register(models.VpcNet, VpcNetConfig)

class VpcSwitchConfig(v1.AryaConfig):

    list_display = \['title',\]

v1.site.register(models.VpcSwitch, VpcSwitchConfig)

class SourceConfig(v1.AryaConfig):

    list_display = \['name'\]

v1.site.register(models.Source, SourceConfig)

#应用

class AppConfig(v1.AryaConfig):

    def get\_model\_form(self):

        if self.model_f:

            return self.model_f

        class Dynamic(ModelForm):

            class Meta:

                model=self.model_class

                fields='\_\_all\_\_'

                # widgets={

                #     'hosts':widgets.Select(attrs={'size':10}),

                # }

        return Dynamic

    def ab(self,row=None,is_title=None):

        if is_title:

            return 'AB组'

        ret = models.App.objects.filter(pk=row.id).first().get\_ab\_display()

        return ret

    def environment(self,row=None,is_title=None):

        if is_title:

            return '主机环境'

        ret = models.App.objects.filter(pk=row.id).first().get\_environment\_display()

        return ret

    def app\_name(self,row=None,is\_title=None):

        if is_title:

            return '应用'

        obj = models.App.objects.filter(pk=row.id).first()

        str='<a href="/water/rbac/app/list.html?k={0}">{1}</a>'

        #删除结尾数字

        q_str=obj.name.rstrip(string.digits)

        ret=str.format(q\_str,q\_str)

        return mark_safe(ret)

    def hosts(self,row=None,is_title=None):

        if is_title:

            return '主机列表'

        value\_list = models.App.objects.filter(pk=row.id).values('hosts\_\_eth0_network')

        str='<a href="/water/rbac/host/list.html?q={0}">{1}</a>'

        ret=''

        for value in value_list:

            val=value\['hosts\_\_eth0\_network'\]

            jg_str=str.format(val,val)

            ret+=jg_str

        return mark_safe(ret)

    def list(self,req):

        self.request=req

        pteam\_obj = req.session.get(settings.PTEAM\_OBJ)

        if req.GET.get('pteamrole') or req.GET.get('ab') or req.GET.get('environment'):

            get_pteamrole=req.GET.get('pteamrole','')

            get_ab=req.GET.get('ab','')

            get_environment=req.GET.get('environment','')

            search_q = req.GET.get('q','')

            candition_q = Q()

            search\_list = self.aget.get\_search_list()

            if search\_list and search\_q:

                for search\_item in search\_list:

                    temp_q = Q()

                    temp\_q.children.append((search\_item, search_q))

                    candition\_q.add(temp\_q, 'OR')

            get\_ab\_tag=''

            get\_environment\_tag=''

            filter_q={}

            if get_pteamrole:

                filter\_q\['pteamrole\_\_groupname'\]=get_pteamrole

            if get_ab:

                for i in models.App.ab_choices:

                    if get_ab in i :

                        filter_q\['ab'\]=i\[0\]

                        continue

            if get_environment:

                for i in models.App.environment_choices:

                    if get_environment in i :

                        filter_q\['environment'\]=i\[0\]

                        continue

            if pteam_obj != 1:

                app\_list = req.session.get(settings.PERMISSION\_HOST)\['app'\]

                queryset = models.App.objects.filter(candition\_q,**filter\_q,pk\_\_in=app\_list).order_by('-id')

            else:

                queryset=models.App.objects.filter(candition\_q,**filter\_q).order_by('-id')

        #通过点击A标签的跳转

        elif req.GET.get('k'):

            self.request = req

            search_q = req.GET.get('k')

            candition_q = Q()

            #拿到需要匹配的列表

            accurate\_list = self.aget.get\_accurate_list()

            if accurate\_list and search\_q:

                for accurate\_item in accurate\_list:

                    #由于测试、灰度环境的应用名不带数字,生产环境的带数字,所以要匹配到xxx1,xxx,xxx2等

                    ser\_li=\['','temp\_a', 'temp\_b', 'temp\_c', 'temp\_d', 'temp\_e'\]

                    for i in ser_li:

                        #列表第一个值为了匹配 没有数字的(灰度,测试等环境)

                        JG=str(ser\_li.index(i)) if ser\_li.index(i) !=0 else ''

                        # JG=str(ser_li.index(i) + 1)

                        i = Q()

                        #拼接生产环境的字符串偶偶额怒

                        i.children.append((accurate\_item, search\_q+JG))

                        candition_q.add(i, 'OR')

            if pteam_obj != 1:

                #获取 权限所能看见的主机列表

                app\_list = req.session.get(settings.PERMISSION\_HOST)\['app'\]

                queryset = models.App.objects.filter(candition\_q, pk\_\_in=app\_list).order\_by('-id')

            else:

                queryset = models.App.objects.filter(candition\_q).order\_by('-id')

        else:

            self.request = req

            search_q = req.GET.get('q')

            candition_q = Q()

            search\_list = self.aget.get\_search_list()

            if search\_list and search\_q:

                for search\_item in search\_list:

                    temp_q = Q()

                    temp\_q.children.append((search\_item, search_q))

                    candition\_q.add(temp\_q, 'OR')

            if pteam_obj != 1:

                app\_list = req.session.get(settings.PERMISSION\_HOST)\['app'\]

                queryset = models.App.objects.filter(candition\_q,pk\_\_in=app\_list).order\_by('-id')

            else:

                queryset = models.App.objects.filter(candition\_q).order\_by('-id')

        data = v1.ChangeList(self, queryset)

        return render(req, 'list.html', {'data': data, 'req': req})

    list\_display = \[app\_name, 'pteamrole',ab,environment,hosts\]

    search\_list = \['name\_\_contains',

                    'hosts\_\_eth0\_network__contains',

                    # 'name'

                    \]

    accurate_list=\['name',\]

    def search\_button\_list(self):

        button_list = \[

            \['项目组', \[\], 'pteamrole'\],

            \['组', \['A', 'B', 'VPC'\], 'ab'\],

            \['环境', \['开发环境', '测试环境', '灰度环境', '压测环境', '生产环境'\], 'environment'\]

        \]

        obj_l=models.Pteam.objects.all()

        for obj in obj_l:

            button_list\[0\]\[1\].append(obj.groupname)

        return button_list

v1.site.register(models.App, AppConfig)

admin.py

代码

from django.contrib import admin

from rbac import models

#主机

admin.site.register(models.Lable)

admin.site.register(models.Memory)

admin.site.register(models.Disk)

admin.site.register(models.Os)

admin.site.register(models.Host)

\# admin.site.register(models.Network)

admin.site.register(models.Source)

admin.site.register(models.Login)

#业务

admin.site.register(models.App)

\# admin.site.register(models.AbroadPay)

\# admin.site.register(models.CorePay)

#中间件

admin.site.register(models.ALiCloud)

admin.site.register(models.Zookeeper)

admin.site.register(models.Kafka)

admin.site.register(models.Oss)

admin.site.register(models.BacketName)

admin.site.register(models.Consumer)

admin.site.register(models.Producer)

admin.site.register(models.Topic)

admin.site.register(models.MqCase)

admin.site.register(models.RabbitMQ)

admin.site.register(models.Redis)

admin.site.register(models.MysqlLogin)

admin.site.register(models.DataBase)

\# admin.site.register(models.MysqlCase)

admin.site.register(models.Mysql)

admin.site.register(models.Ftp)

admin.site.register(models.Svn)

admin.site.register(models.SvnGroup)

settings.py

代码

from \_\_future\_\_ import absolute_import

"""

Django settings for CMDB project.

Generated by 'django-admin startproject' using Django 1.9.8.

For more information on this file, see

https://docs.djangoproject.com/en/1.9/topics/settings/

For the full list of settings and their values, see

https://docs.djangoproject.com/en/1.9/ref/settings/

"""

import os

\# Build paths inside the project like this: os.path.join(BASE_DIR, ...)

BASE\_DIR = os.path.dirname(os.path.dirname(os.path.abspath(\_\_file__)))

\# Quick-start development settings - unsuitable for production

\# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/

\# SECURITY WARNING: keep the secret key used in production secret!

SECRET\_KEY = 'nbyv#ob%@3@9214+!6n31\_)4c08-@%45n5\*mb7\*$el7jl2#s!^'

\# SECURITY WARNING: don't run with debug turned on in production!

DEBUG = True

APPEND_SLASH = False

ALLOWED_HOSTS = \['*',\]

\# Application definition

from django.contrib import admin

from django.contrib.admin.apps import AdminConfig

INSTALLED_APPS = \[

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'water.apps.WaterConfig',

    'corsheaders',

    'rbac',

    'app01',

    'db',

    'release',

    'clientapi',

    'rest_framework',

    'djcelery',

    'VueApi',

\]

#from rbac.middlewares.rbac import RbacMiddleware

MIDDLEWARE_CLASSES = \[

    'django.middleware.security.SecurityMiddleware',

    'django.contrib.sessions.middleware.SessionMiddleware',

    'corsheaders.middleware.CorsMiddleware',

    'django.middleware.common.CommonMiddleware',

    'django.middleware.csrf.CsrfViewMiddleware',

    'django.contrib.auth.middleware.AuthenticationMiddleware',

    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',

    'django.contrib.messages.middleware.MessageMiddleware',

    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    # 'rbac.middlewares.rbac.RbacMiddleware',

\]

ROOT_URLCONF = 'CMDB.urls'

TEMPLATES = \[

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        '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',

            \],

        },

    },

\]

WSGI_APPLICATION = 'CMDB.wsgi.application'

DATA\_UPLOAD\_MAX\_MEMORY\_SIZE = 10000000000

\# Database

\# https://docs.djangoproject.com/en/1.9/ref/settings/#databases

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'cmdb',

        'USER': 'cmdb_user',

        'PASSWORD': 'onda1478963',

        'HOST': '61.153.96.142',

        'PORT': '3307',

    }

}

AUTH\_PASSWORD\_VALIDATORS = \[

    {

        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',

    },

    {

        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',

    },

    {

        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',

    },

    {

        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',

    },

\]

\# Internationalization

\# https://docs.djangoproject.com/en/1.9/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Shanghai'

\# TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = False

\# USE_TZ = True

\# Static files (CSS, JavaScript, Images)

\# https://docs.djangoproject.com/en/1.9/howto/static-files/

STATIC_URL = '/static/'

STATICFILES_DIRS = (

    # os.path.join(BASE_DIR, "static"),

    os.path.join(BASE_DIR, "water/static"),

)

####################配置变量###############

PERMISSION\_URL\_DICT_KEY='dafsessiondfd'

VALID_URL=('/water/login/','/water/register/','/water/logout/',

           '/water/ali\_client\_api.html/','/water/ali_main.html/',

           '/water/ali\_func.html/','/water/alirds\_func.html/',

           '/water/celery_status.html/','/log/',

           '/water/alirds\_client\_api.html/','/water/db_func.html/',

            '/water/sendmail/','/water/home/','/package/','/test.html',

            '/code.html','/api/release/','/static/','/admin/*','/api/auth/',

           '/vueapi','/test','/login/test/'

           )

SESSION\_COOKIE\_AGE=60\*60\*3   #session 保存时间,3小时

SESSION\_EXPIRE\_AT\_BROWSER\_CLOSE=True

CODEIMG='fsadcodef'

USER='userresu'

USERID='idusersuid'

PERMISSION_HOST='fdasfqw'

PTEAM_OBJ='fdasfaegth'

PERMISSION\_MENU\_KEY='dfadfew'

PERMISSION\_AUTH\_KEY='dfadsfqwew'

HTTP_URL='http://127.0.0.1:8000'

\# HTTP_URL='http://10.45.138.187'

LOG_PATH=(

    os.path.join(BASE_DIR, "log/error.log"),

    os.path.join(BASE_DIR, "log/password.log"),

    os.path.join(BASE\_DIR, "log/release\_api.log"),

)

#######ali_api

ACCESSKEY_ID='LTAIH9CwyQbfA0h3'

ACCESSKEY_KEY='lY8NnmUIFpfyYFXRs3IHVXhC2Ou6tZ'

###########restframework

REST_FRAMEWORK = {

    # "DEFAULT\_VERSIONING\_CLASS":"rest_framework.versioning.URLPathVersioning",

    # 'ALLOWED_VERSIONS':\['v1','v1'\],

    # "DEFAULT_VERSION":'v1',

    "UNAUTHENTICATED_USER":None,

    "UNAUTHENTICATED_TOKEN":None,

    # "UNAUTHENTICATED_USER":lambda :None,

    # "UNAUTHENTICATED_TOKEN":lambda :None,

    'DEFAULT\_AUTHENTICATION\_CLASSES': \['release.utlis.api_auth.TokenAuthtication',\]

}

#跨域增加忽略

CORS\_ALLOW\_CREDENTIALS = True

CORS\_ORIGIN\_ALLOW_ALL = True

CORS\_ORIGIN\_WHITELIST = ()

CORS\_ALLOW\_METHODS = (

    'DELETE',

    'GET',

    'OPTIONS',

    'PATCH',

    'POST',

    'PUT',

    'VIEW',

)

\# CORS\_ALLOW\_HEADERS = ('*')

CORS\_ALLOW\_HEADERS = (

    'content-disposition',

    'accept',

    'accept-encoding',

    'authorization',

    'Authorization',

    'content-type',

    'dnt',

    'origin',

    'user-agent',

    'x-csrftoken',

    'x-requested-with',

)

#################client################

\# SALT_API='https://101.201.141.232:8001/'

\# SALT_USERNAME='saltapi'

\# SALT_PASSWORD='123@qwe'

########celery

import djcelery

from celery.schedules import crontab

from datetime import timedelta

djcelery.setup_loader()

CELERY\_TIMEZONE = TIME\_ZONE

BROKER_URL='redis://:onda@47.93.86.201:6379/1'

CELERY\_RESULT\_BACKEND='redis://:onda@47.93.86.201:6379/2'

CELERY\_ACCEPT\_CONTENT = \['application/json'\]

CELERY\_TASK\_SERIALIZER = 'json'

CELERY\_RESULT\_SERIALIZER = 'json'

CELERY_TIMEZONE = 'Africa/Nairobi'

CELERY_IMPORTS=\['app01.task','clientapi.task'\]

CELERYD\_MAX\_TASKS\_PER\_CHILD = 3

CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

apps.py

代码

from django.apps import AppConfig

from django.utils.module\_loading import autodiscover\_modules

class WaterConfig(AppConfig):

    name = 'water'

    def ready(self):

        autodiscover_modules('water')

转载于:https://my.oschina.net/u/3959701/blog/3102688

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值