@@ -0,0 +1,29 @@  | 
            ||
| 1 | 
                +# EditorConfig is awesome: http://EditorConfig.org  | 
            |
| 2 | 
                +  | 
            |
| 3 | 
                +# top-most EditorConfig file  | 
            |
| 4 | 
                +root = true  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +# Unix-style newlines with a newline ending every file  | 
            |
| 7 | 
                +[*]  | 
            |
| 8 | 
                +end_of_line = lf  | 
            |
| 9 | 
                +insert_final_newline = false  | 
            |
| 10 | 
                +  | 
            |
| 11 | 
                +# 4 space indentation  | 
            |
| 12 | 
                +[*.py]  | 
            |
| 13 | 
                +indent_style = space  | 
            |
| 14 | 
                +indent_size = 4  | 
            |
| 15 | 
                +  | 
            |
| 16 | 
                +# Tab indentation (no size specified)  | 
            |
| 17 | 
                +[*.js]  | 
            |
| 18 | 
                +indent_style = space  | 
            |
| 19 | 
                +indent_size = 4  | 
            |
| 20 | 
                +  | 
            |
| 21 | 
                +# Tab indentation (no size specified)  | 
            |
| 22 | 
                +[*.html]  | 
            |
| 23 | 
                +indent_style = space  | 
            |
| 24 | 
                +indent_size = 4  | 
            |
| 25 | 
                +  | 
            |
| 26 | 
                +# Matches the exact files either package.json or .travis.yml  | 
            |
| 27 | 
                +[{package.json,.travis.yml}]
               | 
            |
| 28 | 
                +indent_style = space  | 
            |
| 29 | 
                +indent_size = 2  | 
            
                @@ -0,0 +1,69 @@  | 
            ||
| 1 | 
                +# Byte-compiled / optimized / DLL files  | 
            |
| 2 | 
                +__pycache__/  | 
            |
| 3 | 
                +*.py[cod]  | 
            |
| 4 | 
                +*.swp  | 
            |
| 5 | 
                +# C extensions  | 
            |
| 6 | 
                +*.so  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +# Distribution / packaging  | 
            |
| 9 | 
                +bin/  | 
            |
| 10 | 
                +build/  | 
            |
| 11 | 
                +develop-eggs/  | 
            |
| 12 | 
                +dist/  | 
            |
| 13 | 
                +eggs/  | 
            |
| 14 | 
                +lib/  | 
            |
| 15 | 
                +lib64/  | 
            |
| 16 | 
                +parts/  | 
            |
| 17 | 
                +sdist/  | 
            |
| 18 | 
                +venv/  | 
            |
| 19 | 
                +var/  | 
            |
| 20 | 
                +static/upload/  | 
            |
| 21 | 
                +*.egg-info/  | 
            |
| 22 | 
                +.installed.cfg  | 
            |
| 23 | 
                +*.egg  | 
            |
| 24 | 
                +*.sublime*  | 
            |
| 25 | 
                +  | 
            |
| 26 | 
                +# Installer logs  | 
            |
| 27 | 
                +pip-log.txt  | 
            |
| 28 | 
                +pip-delete-this-directory.txt  | 
            |
| 29 | 
                +  | 
            |
| 30 | 
                +# Unit test / coverage reports  | 
            |
| 31 | 
                +.tox/  | 
            |
| 32 | 
                +.coverage  | 
            |
| 33 | 
                +.cache  | 
            |
| 34 | 
                +nosetests.xml  | 
            |
| 35 | 
                +coverage.xml  | 
            |
| 36 | 
                +  | 
            |
| 37 | 
                +# Translations  | 
            |
| 38 | 
                +# *.mo  | 
            |
| 39 | 
                +  | 
            |
| 40 | 
                +# Mr Developer  | 
            |
| 41 | 
                +.mr.developer.cfg  | 
            |
| 42 | 
                +.project  | 
            |
| 43 | 
                +.pydevproject  | 
            |
| 44 | 
                +.settings  | 
            |
| 45 | 
                +# Rope  | 
            |
| 46 | 
                +.ropeproject  | 
            |
| 47 | 
                +  | 
            |
| 48 | 
                +# Django stuff:  | 
            |
| 49 | 
                +*.log  | 
            |
| 50 | 
                +*.pot  | 
            |
| 51 | 
                +  | 
            |
| 52 | 
                +# Sphinx documentation  | 
            |
| 53 | 
                +docs/_build/  | 
            |
| 54 | 
                +  | 
            |
| 55 | 
                +  | 
            |
| 56 | 
                +# Ignore For zhTimer  | 
            |
| 57 | 
                +.DS_Store  | 
            |
| 58 | 
                +db.sqlite3  | 
            |
| 59 | 
                +local_settings.py  | 
            |
| 60 | 
                +  | 
            |
| 61 | 
                +.idea/  | 
            |
| 62 | 
                +media/  | 
            |
| 63 | 
                +collect_static/  | 
            |
| 64 | 
                +  | 
            |
| 65 | 
                +# Special File  | 
            |
| 66 | 
                +*download.html  | 
            |
| 67 | 
                +  | 
            |
| 68 | 
                +# Qiniu  | 
            |
| 69 | 
                +.qiniu_pythonsdk_hostscache.json  | 
            
                @@ -0,0 +1,8 @@  | 
            ||
| 1 | 
                +# See the menu of settings available here:  | 
            |
| 2 | 
                +# https://github.com/timothycrosley/isort/wiki/isort-Settings  | 
            |
| 3 | 
                +  | 
            |
| 4 | 
                +[settings]  | 
            |
| 5 | 
                +indent=' '  | 
            |
| 6 | 
                +line_length=120  | 
            |
| 7 | 
                +lines_after_imports=2  | 
            |
| 8 | 
                +skip=migrations  | 
            
                @@ -0,0 +1,22 @@  | 
            ||
| 1 | 
                +#!/usr/bin/env python  | 
            |
| 2 | 
                +"""Django's command-line utility for administrative tasks."""  | 
            |
| 3 | 
                +import os  | 
            |
| 4 | 
                +import sys  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +def main():  | 
            |
| 8 | 
                + """Run administrative tasks."""  | 
            |
| 9 | 
                +    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wxcloudemo.settings')
               | 
            |
| 10 | 
                + try:  | 
            |
| 11 | 
                + from django.core.management import execute_from_command_line  | 
            |
| 12 | 
                + except ImportError as exc:  | 
            |
| 13 | 
                + raise ImportError(  | 
            |
| 14 | 
                + "Couldn't import Django. Are you sure it's installed and "  | 
            |
| 15 | 
                + "available on your PYTHONPATH environment variable? Did you "  | 
            |
| 16 | 
                + "forget to activate a virtual environment?"  | 
            |
| 17 | 
                + ) from exc  | 
            |
| 18 | 
                + execute_from_command_line(sys.argv)  | 
            |
| 19 | 
                +  | 
            |
| 20 | 
                +  | 
            |
| 21 | 
                +if __name__ == '__main__':  | 
            |
| 22 | 
                + main()  | 
            
                @@ -0,0 +1,9 @@  | 
            ||
| 1 | 
                +#!/bin/bash  | 
            |
| 2 | 
                +  | 
            |
| 3 | 
                +# Ignoring autogenerated files  | 
            |
| 4 | 
                +# -- Migration directories  | 
            |
| 5 | 
                +# Ignoring error codes  | 
            |
| 6 | 
                +# -- E128 continuation line under-indented for visual indent  | 
            |
| 7 | 
                +# -- E501 line too long  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                +pycodestyle --exclude=migrations --ignore=E128,E501 .  | 
            
                @@ -0,0 +1,3 @@  | 
            ||
| 1 | 
                +-r requirements_dj.txt  | 
            |
| 2 | 
                +-r requirements_pywe.txt  | 
            |
| 3 | 
                +-r requirements_redis.txt  | 
            
                @@ -0,0 +1,3 @@  | 
            ||
| 1 | 
                +ipdb==0.13.9  | 
            |
| 2 | 
                +ipython==7.34.0  | 
            |
| 3 | 
                +uwsgi==2.0.20  | 
            
                @@ -0,0 +1,2 @@  | 
            ||
| 1 | 
                +isort==5.10.1  | 
            |
| 2 | 
                +pycodestyle==2.8.0  | 
            
                @@ -0,0 +1 @@  | 
            ||
| 1 | 
                +Django==3.2.13  | 
            
                @@ -0,0 +1,3 @@  | 
            ||
| 1 | 
                +hiredis==2.0.0  | 
            |
| 2 | 
                +redis==4.3.3  | 
            |
| 3 | 
                +redis-extensions==2.0.7  | 
            
                @@ -0,0 +1,4 @@  | 
            ||
| 1 | 
                +#!/bin/bash  | 
            |
| 2 | 
                +  | 
            |
| 3 | 
                +sudo sysctl -w net.core.somaxconn=65535  | 
            |
| 4 | 
                +sudo sysctl -w net.core.netdev_max_backlog=65535  | 
            
                @@ -0,0 +1,16 @@  | 
            ||
| 1 | 
                +"""  | 
            |
| 2 | 
                +ASGI config for wxcloudemo project.  | 
            |
| 3 | 
                +  | 
            |
| 4 | 
                +It exposes the ASGI callable as a module-level variable named ``application``.  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +For more information on this file, see  | 
            |
| 7 | 
                +https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/  | 
            |
| 8 | 
                +"""  | 
            |
| 9 | 
                +  | 
            |
| 10 | 
                +import os  | 
            |
| 11 | 
                +  | 
            |
| 12 | 
                +from django.core.asgi import get_asgi_application  | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wxcloudemo.settings')
               | 
            |
| 15 | 
                +  | 
            |
| 16 | 
                +application = get_asgi_application()  | 
            
                @@ -0,0 +1,125 @@  | 
            ||
| 1 | 
                +"""  | 
            |
| 2 | 
                +Django settings for wxcloudemo project.  | 
            |
| 3 | 
                +  | 
            |
| 4 | 
                +Generated by 'django-admin startproject' using Django 3.2.13.  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +For more information on this file, see  | 
            |
| 7 | 
                +https://docs.djangoproject.com/en/3.2/topics/settings/  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                +For the full list of settings and their values, see  | 
            |
| 10 | 
                +https://docs.djangoproject.com/en/3.2/ref/settings/  | 
            |
| 11 | 
                +"""  | 
            |
| 12 | 
                +  | 
            |
| 13 | 
                +from pathlib import Path  | 
            |
| 14 | 
                +  | 
            |
| 15 | 
                +# Build paths inside the project like this: BASE_DIR / 'subdir'.  | 
            |
| 16 | 
                +BASE_DIR = Path(__file__).resolve().parent.parent  | 
            |
| 17 | 
                +  | 
            |
| 18 | 
                +  | 
            |
| 19 | 
                +# Quick-start development settings - unsuitable for production  | 
            |
| 20 | 
                +# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/  | 
            |
| 21 | 
                +  | 
            |
| 22 | 
                +# SECURITY WARNING: keep the secret key used in production secret!  | 
            |
| 23 | 
                +SECRET_KEY = 'django-insecure-7if2wxrz&ykbmwlec644z%ankwga(i6hw26rz5p-9b$9ih1vy^'  | 
            |
| 24 | 
                +  | 
            |
| 25 | 
                +# SECURITY WARNING: don't run with debug turned on in production!  | 
            |
| 26 | 
                +DEBUG = True  | 
            |
| 27 | 
                +  | 
            |
| 28 | 
                +ALLOWED_HOSTS = []  | 
            |
| 29 | 
                +  | 
            |
| 30 | 
                +  | 
            |
| 31 | 
                +# Application definition  | 
            |
| 32 | 
                +  | 
            |
| 33 | 
                +INSTALLED_APPS = [  | 
            |
| 34 | 
                + 'django.contrib.admin',  | 
            |
| 35 | 
                + 'django.contrib.auth',  | 
            |
| 36 | 
                + 'django.contrib.contenttypes',  | 
            |
| 37 | 
                + 'django.contrib.sessions',  | 
            |
| 38 | 
                + 'django.contrib.messages',  | 
            |
| 39 | 
                + 'django.contrib.staticfiles',  | 
            |
| 40 | 
                +]  | 
            |
| 41 | 
                +  | 
            |
| 42 | 
                +MIDDLEWARE = [  | 
            |
| 43 | 
                + 'django.middleware.security.SecurityMiddleware',  | 
            |
| 44 | 
                + 'django.contrib.sessions.middleware.SessionMiddleware',  | 
            |
| 45 | 
                + 'django.middleware.common.CommonMiddleware',  | 
            |
| 46 | 
                + 'django.middleware.csrf.CsrfViewMiddleware',  | 
            |
| 47 | 
                + 'django.contrib.auth.middleware.AuthenticationMiddleware',  | 
            |
| 48 | 
                + 'django.contrib.messages.middleware.MessageMiddleware',  | 
            |
| 49 | 
                + 'django.middleware.clickjacking.XFrameOptionsMiddleware',  | 
            |
| 50 | 
                +]  | 
            |
| 51 | 
                +  | 
            |
| 52 | 
                +ROOT_URLCONF = 'wxcloudemo.urls'  | 
            |
| 53 | 
                +  | 
            |
| 54 | 
                +TEMPLATES = [  | 
            |
| 55 | 
                +    {
               | 
            |
| 56 | 
                + 'BACKEND': 'django.template.backends.django.DjangoTemplates',  | 
            |
| 57 | 
                + 'DIRS': [],  | 
            |
| 58 | 
                + 'APP_DIRS': True,  | 
            |
| 59 | 
                +        'OPTIONS': {
               | 
            |
| 60 | 
                + 'context_processors': [  | 
            |
| 61 | 
                + 'django.template.context_processors.debug',  | 
            |
| 62 | 
                + 'django.template.context_processors.request',  | 
            |
| 63 | 
                + 'django.contrib.auth.context_processors.auth',  | 
            |
| 64 | 
                + 'django.contrib.messages.context_processors.messages',  | 
            |
| 65 | 
                + ],  | 
            |
| 66 | 
                + },  | 
            |
| 67 | 
                + },  | 
            |
| 68 | 
                +]  | 
            |
| 69 | 
                +  | 
            |
| 70 | 
                +WSGI_APPLICATION = 'wxcloudemo.wsgi.application'  | 
            |
| 71 | 
                +  | 
            |
| 72 | 
                +  | 
            |
| 73 | 
                +# Database  | 
            |
| 74 | 
                +# https://docs.djangoproject.com/en/3.2/ref/settings/#databases  | 
            |
| 75 | 
                +  | 
            |
| 76 | 
                +DATABASES = {
               | 
            |
| 77 | 
                +    'default': {
               | 
            |
| 78 | 
                + 'ENGINE': 'django.db.backends.sqlite3',  | 
            |
| 79 | 
                + 'NAME': BASE_DIR / 'db.sqlite3',  | 
            |
| 80 | 
                + }  | 
            |
| 81 | 
                +}  | 
            |
| 82 | 
                +  | 
            |
| 83 | 
                +  | 
            |
| 84 | 
                +# Password validation  | 
            |
| 85 | 
                +# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators  | 
            |
| 86 | 
                +  | 
            |
| 87 | 
                +AUTH_PASSWORD_VALIDATORS = [  | 
            |
| 88 | 
                +    {
               | 
            |
| 89 | 
                + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',  | 
            |
| 90 | 
                + },  | 
            |
| 91 | 
                +    {
               | 
            |
| 92 | 
                + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',  | 
            |
| 93 | 
                + },  | 
            |
| 94 | 
                +    {
               | 
            |
| 95 | 
                + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',  | 
            |
| 96 | 
                + },  | 
            |
| 97 | 
                +    {
               | 
            |
| 98 | 
                + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',  | 
            |
| 99 | 
                + },  | 
            |
| 100 | 
                +]  | 
            |
| 101 | 
                +  | 
            |
| 102 | 
                +  | 
            |
| 103 | 
                +# Internationalization  | 
            |
| 104 | 
                +# https://docs.djangoproject.com/en/3.2/topics/i18n/  | 
            |
| 105 | 
                +  | 
            |
| 106 | 
                +LANGUAGE_CODE = 'en-us'  | 
            |
| 107 | 
                +  | 
            |
| 108 | 
                +TIME_ZONE = 'UTC'  | 
            |
| 109 | 
                +  | 
            |
| 110 | 
                +USE_I18N = True  | 
            |
| 111 | 
                +  | 
            |
| 112 | 
                +USE_L10N = True  | 
            |
| 113 | 
                +  | 
            |
| 114 | 
                +USE_TZ = True  | 
            |
| 115 | 
                +  | 
            |
| 116 | 
                +  | 
            |
| 117 | 
                +# Static files (CSS, JavaScript, Images)  | 
            |
| 118 | 
                +# https://docs.djangoproject.com/en/3.2/howto/static-files/  | 
            |
| 119 | 
                +  | 
            |
| 120 | 
                +STATIC_URL = '/static/'  | 
            |
| 121 | 
                +  | 
            |
| 122 | 
                +# Default primary key field type  | 
            |
| 123 | 
                +# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field  | 
            |
| 124 | 
                +  | 
            |
| 125 | 
                +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'  | 
            
                @@ -0,0 +1,21 @@  | 
            ||
| 1 | 
                +"""wxcloudemo URL Configuration  | 
            |
| 2 | 
                +  | 
            |
| 3 | 
                +The `urlpatterns` list routes URLs to views. For more information please see:  | 
            |
| 4 | 
                + https://docs.djangoproject.com/en/3.2/topics/http/urls/  | 
            |
| 5 | 
                +Examples:  | 
            |
| 6 | 
                +Function views  | 
            |
| 7 | 
                + 1. Add an import: from my_app import views  | 
            |
| 8 | 
                +    2. Add a URL to urlpatterns:  path('', views.home, name='home')
               | 
            |
| 9 | 
                +Class-based views  | 
            |
| 10 | 
                + 1. Add an import: from other_app.views import Home  | 
            |
| 11 | 
                +    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
               | 
            |
| 12 | 
                +Including another URLconf  | 
            |
| 13 | 
                + 1. Import the include() function: from django.urls import include, path  | 
            |
| 14 | 
                +    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
               | 
            |
| 15 | 
                +"""  | 
            |
| 16 | 
                +from django.contrib import admin  | 
            |
| 17 | 
                +from django.urls import path  | 
            |
| 18 | 
                +  | 
            |
| 19 | 
                +urlpatterns = [  | 
            |
| 20 | 
                +    path('admin/', admin.site.urls),
               | 
            |
| 21 | 
                +]  | 
            
                @@ -0,0 +1,16 @@  | 
            ||
| 1 | 
                +"""  | 
            |
| 2 | 
                +WSGI config for wxcloudemo project.  | 
            |
| 3 | 
                +  | 
            |
| 4 | 
                +It exposes the WSGI callable as a module-level variable named ``application``.  | 
            |
| 5 | 
                +  | 
            |
| 6 | 
                +For more information on this file, see  | 
            |
| 7 | 
                +https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/  | 
            |
| 8 | 
                +"""  | 
            |
| 9 | 
                +  | 
            |
| 10 | 
                +import os  | 
            |
| 11 | 
                +  | 
            |
| 12 | 
                +from django.core.wsgi import get_wsgi_application  | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wxcloudemo.settings')
               | 
            |
| 15 | 
                +  | 
            |
| 16 | 
                +application = get_wsgi_application()  |