├── LICENSE ├── django_wechat.egg-info ├── dependency_links.txt ├── top_level.txt ├── requires.txt ├── PKG-INFO └── SOURCES.txt ├── django_wechat_api.egg-info ├── dependency_links.txt ├── top_level.txt ├── requires.txt ├── PKG-INFO └── SOURCES.txt ├── django_wechat_base.egg-info ├── dependency_links.txt ├── top_level.txt ├── requires.txt ├── PKG-INFO └── SOURCES.txt ├── docs ├── _build_html │ ├── _sources │ │ ├── intro.txt │ │ ├── start.txt │ │ └── index.txt │ ├── objects.inv │ ├── _static │ │ ├── up.png │ │ ├── down.png │ │ ├── file.png │ │ ├── plus.png │ │ ├── comment.png │ │ ├── minus.png │ │ ├── ajax-loader.gif │ │ ├── down-pressed.png │ │ ├── up-pressed.png │ │ ├── comment-bright.png │ │ ├── comment-close.png │ │ ├── fonts │ │ │ ├── Lato-Bold.ttf │ │ │ ├── Lato-Regular.ttf │ │ │ ├── Inconsolata-Bold.ttf │ │ │ ├── RobotoSlab-Bold.ttf │ │ │ ├── RobotoSlab-Regular.ttf │ │ │ ├── Inconsolata-Regular.ttf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── fontawesome-webfont.woff │ │ ├── css │ │ │ └── badge_only.css │ │ ├── pygments.css │ │ ├── js │ │ │ └── theme.js │ │ ├── doctools.js │ │ └── underscore.js │ ├── .doctrees │ │ ├── index.doctree │ │ ├── intro.doctree │ │ ├── start.doctree │ │ └── environment.pickle │ ├── .buildinfo │ ├── searchindex.js │ ├── genindex.html │ ├── intro.html │ ├── search.html │ ├── start.html │ └── index.html ├── _build │ ├── html │ │ ├── objects.inv │ │ ├── _static │ │ │ ├── up.png │ │ │ ├── down.png │ │ │ ├── file.png │ │ │ ├── plus.png │ │ │ ├── comment.png │ │ │ ├── minus.png │ │ │ ├── ajax-loader.gif │ │ │ ├── down-pressed.png │ │ │ ├── up-pressed.png │ │ │ ├── comment-bright.png │ │ │ ├── comment-close.png │ │ │ ├── fonts │ │ │ │ ├── Lato-Bold.ttf │ │ │ │ ├── Lato-Regular.ttf │ │ │ │ ├── Inconsolata-Bold.ttf │ │ │ │ ├── RobotoSlab-Bold.ttf │ │ │ │ ├── RobotoSlab-Regular.ttf │ │ │ │ ├── Inconsolata-Regular.ttf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ └── fontawesome-webfont.woff │ │ │ ├── css │ │ │ │ └── badge_only.css │ │ │ ├── pygments.css │ │ │ ├── js │ │ │ │ └── theme.js │ │ │ ├── doctools.js │ │ │ └── underscore.js │ │ ├── .buildinfo │ │ ├── _sources │ │ │ ├── start.txt │ │ │ └── index.txt │ │ ├── searchindex.js │ │ ├── genindex.html │ │ ├── search.html │ │ ├── start.html │ │ └── index.html │ ├── .doctrees │ │ ├── index.doctree │ │ ├── intro.doctree │ │ └── start.doctree │ └── doctrees │ │ ├── index.doctree │ │ ├── start.doctree │ │ └── environment.pickle ├── start.rst ├── index.rst ├── make.bat ├── Makefile └── conf.py ├── wechat ├── __init__.py ├── tests.py ├── locale │ └── zh_Hans │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── urls.py ├── apps.py ├── templates │ └── admin │ │ └── wechat │ │ └── menu │ │ └── change_list.html ├── views.py ├── admin.py └── models.py ├── dist ├── django-wechat-0.2.tar.gz ├── django-wechat-0.3.1.tar.gz ├── django-wechat-0.3.tar.gz ├── django-wechat-api-0.3.1.tar.gz ├── django-wechat-api-0.3.2.tar.gz ├── django-wechat-base-0.3.3.tar.gz ├── django-wechat-base-0.4.1.tar.gz ├── django-wechat-base-0.4.2.tar.gz ├── django-wechat-base-0.4.3.tar.gz ├── django-wechat-base-0.4.4.tar.gz ├── django-wechat-base-0.4.5.tar.gz ├── django_wechat-0.3.1-py2-none-any.whl ├── django_wechat_api-0.3.1-py2-none-any.whl ├── django_wechat_api-0.3.2-py2-none-any.whl ├── django_wechat_base-0.3.3-py2-none-any.whl ├── django_wechat_base-0.4.1-py2-none-any.whl ├── django_wechat_base-0.4.2-py2-none-any.whl ├── django_wechat_base-0.4.3-py2-none-any.whl ├── django_wechat_base-0.4.4-py2-none-any.whl └── django_wechat_base-0.4.5-py2-none-any.whl ├── .gitignore ├── MANIFEST.in ├── setup.py └── README.rst /LICENSE: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django_wechat.egg-info/dependency_links.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /django_wechat.egg-info/top_level.txt: -------------------------------------------------------------------------------- 1 | wechat 2 | -------------------------------------------------------------------------------- /django_wechat.egg-info/requires.txt: -------------------------------------------------------------------------------- 1 | xmltodict>=0.9.2 -------------------------------------------------------------------------------- /django_wechat_api.egg-info/dependency_links.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /django_wechat_api.egg-info/top_level.txt: -------------------------------------------------------------------------------- 1 | wechat 2 | -------------------------------------------------------------------------------- /django_wechat_base.egg-info/dependency_links.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /django_wechat_base.egg-info/top_level.txt: -------------------------------------------------------------------------------- 1 | wechat 2 | -------------------------------------------------------------------------------- /django_wechat_api.egg-info/requires.txt: -------------------------------------------------------------------------------- 1 | xmltodict>=0.9.2 -------------------------------------------------------------------------------- /django_wechat_base.egg-info/requires.txt: -------------------------------------------------------------------------------- 1 | xmltodict>=0.9.2 -------------------------------------------------------------------------------- /docs/_build_html/_sources/intro.txt: -------------------------------------------------------------------------------- 1 | Intro 2 | ###### 3 | -------------------------------------------------------------------------------- /wechat/__init__.py: -------------------------------------------------------------------------------- 1 | default_app_config = 'wechat.apps.WechatConfig' 2 | 3 | -------------------------------------------------------------------------------- /wechat/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /docs/_build/html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/objects.inv -------------------------------------------------------------------------------- /docs/_build_html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/objects.inv -------------------------------------------------------------------------------- /dist/django-wechat-0.2.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-0.2.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-0.3.1.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-0.3.1.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-0.3.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-0.3.tar.gz -------------------------------------------------------------------------------- /docs/_build/html/_static/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/up.png -------------------------------------------------------------------------------- /docs/_build_html/_static/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/up.png -------------------------------------------------------------------------------- /docs/_build/html/_static/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/down.png -------------------------------------------------------------------------------- /docs/_build/html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/file.png -------------------------------------------------------------------------------- /docs/_build/html/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/plus.png -------------------------------------------------------------------------------- /docs/_build_html/_static/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/down.png -------------------------------------------------------------------------------- /docs/_build_html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/file.png -------------------------------------------------------------------------------- /docs/_build_html/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/plus.png -------------------------------------------------------------------------------- /dist/django-wechat-api-0.3.1.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-api-0.3.1.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-api-0.3.2.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-api-0.3.2.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-base-0.3.3.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-base-0.3.3.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-base-0.4.1.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-base-0.4.1.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-base-0.4.2.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-base-0.4.2.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-base-0.4.3.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-base-0.4.3.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-base-0.4.4.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-base-0.4.4.tar.gz -------------------------------------------------------------------------------- /dist/django-wechat-base-0.4.5.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django-wechat-base-0.4.5.tar.gz -------------------------------------------------------------------------------- /docs/_build/.doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/.doctrees/index.doctree -------------------------------------------------------------------------------- /docs/_build/.doctrees/intro.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/.doctrees/intro.doctree -------------------------------------------------------------------------------- /docs/_build/.doctrees/start.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/.doctrees/start.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/doctrees/index.doctree -------------------------------------------------------------------------------- /docs/_build/doctrees/start.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/doctrees/start.doctree -------------------------------------------------------------------------------- /docs/_build/html/_static/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/comment.png -------------------------------------------------------------------------------- /docs/_build/html/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/minus.png -------------------------------------------------------------------------------- /docs/_build_html/_static/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/comment.png -------------------------------------------------------------------------------- /docs/_build_html/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/minus.png -------------------------------------------------------------------------------- /dist/django_wechat-0.3.1-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat-0.3.1-py2-none-any.whl -------------------------------------------------------------------------------- /docs/_build/doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/doctrees/environment.pickle -------------------------------------------------------------------------------- /docs/_build/html/_static/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/ajax-loader.gif -------------------------------------------------------------------------------- /docs/_build/html/_static/down-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/down-pressed.png -------------------------------------------------------------------------------- /docs/_build/html/_static/up-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/up-pressed.png -------------------------------------------------------------------------------- /docs/_build_html/.doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/.doctrees/index.doctree -------------------------------------------------------------------------------- /docs/_build_html/.doctrees/intro.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/.doctrees/intro.doctree -------------------------------------------------------------------------------- /docs/_build_html/.doctrees/start.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/.doctrees/start.doctree -------------------------------------------------------------------------------- /docs/_build_html/_static/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/ajax-loader.gif -------------------------------------------------------------------------------- /docs/_build_html/_static/down-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/down-pressed.png -------------------------------------------------------------------------------- /docs/_build_html/_static/up-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/up-pressed.png -------------------------------------------------------------------------------- /docs/_build/html/_static/comment-bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/comment-bright.png -------------------------------------------------------------------------------- /docs/_build/html/_static/comment-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/comment-close.png -------------------------------------------------------------------------------- /docs/_build_html/_static/comment-bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/comment-bright.png -------------------------------------------------------------------------------- /docs/_build_html/_static/comment-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/comment-close.png -------------------------------------------------------------------------------- /wechat/locale/zh_Hans/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/wechat/locale/zh_Hans/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /dist/django_wechat_api-0.3.1-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat_api-0.3.1-py2-none-any.whl -------------------------------------------------------------------------------- /dist/django_wechat_api-0.3.2-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat_api-0.3.2-py2-none-any.whl -------------------------------------------------------------------------------- /dist/django_wechat_base-0.3.3-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat_base-0.3.3-py2-none-any.whl -------------------------------------------------------------------------------- /dist/django_wechat_base-0.4.1-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat_base-0.4.1-py2-none-any.whl -------------------------------------------------------------------------------- /dist/django_wechat_base-0.4.2-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat_base-0.4.2-py2-none-any.whl -------------------------------------------------------------------------------- /dist/django_wechat_base-0.4.3-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat_base-0.4.3-py2-none-any.whl -------------------------------------------------------------------------------- /dist/django_wechat_base-0.4.4-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat_base-0.4.4-py2-none-any.whl -------------------------------------------------------------------------------- /dist/django_wechat_base-0.4.5-py2-none-any.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/dist/django_wechat_base-0.4.5-py2-none-any.whl -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /docs/_build_html/.doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/.doctrees/environment.pickle -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /wechat/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | from . import views 3 | 4 | urlpatterns = [ 5 | url(r'^$', views.index, name='index'), 6 | ] 7 | -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/RobotoSlab-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/RobotoSlab-Bold.ttf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # python files 2 | *.pyc 3 | 4 | # django migrations files 5 | **/migrations 6 | 7 | # scss cache files 8 | *.css.map 9 | **/.sass-cache 10 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE 2 | include README.rst 3 | recursive-include wechat/locale * 4 | recursive-include wechat/templates * 5 | recursive-include docs * 6 | -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/RobotoSlab-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/RobotoSlab-Regular.ttf -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/_build/html/_static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build/html/_static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/_build_html/_static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChanMo/django_wechat/HEAD/docs/_build_html/_static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /wechat/apps.py: -------------------------------------------------------------------------------- 1 | from django.utils.translation import ugettext_lazy as _ 2 | from django.apps import AppConfig 3 | 4 | class WechatConfig(AppConfig): 5 | name = 'wechat' 6 | verbose_name = _('wechat') 7 | -------------------------------------------------------------------------------- /docs/_build/html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 43d22ff0ebec04b511688f1162742617 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /docs/_build_html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 43d22ff0ebec04b511688f1162742617 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /wechat/templates/admin/wechat/menu/change_list.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/change_list.html" %} 2 | {% load i18n %} 3 | {% block object-tools-items %} 4 | {{ block.super }} 5 |
  • 6 | {% trans "upload menu" %} 7 |
  • 8 | 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /wechat/views.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpResponse 2 | from django.views.decorators.csrf import csrf_exempt 3 | 4 | from . import api 5 | 6 | 7 | # Create your views here. 8 | @csrf_exempt 9 | def index(request): 10 | wx = api.Base() 11 | data = request.GET 12 | try: 13 | echostr = data['echostr'] 14 | result = wx.check_sign(data) 15 | if result: 16 | return HttpResponse(echostr) 17 | else: 18 | return HttpResponse('error') 19 | except KeyError: 20 | wx_res = api.Response(request) 21 | result = wx_res.get_response() 22 | return HttpResponse(result) 23 | 24 | -------------------------------------------------------------------------------- /docs/start.rst: -------------------------------------------------------------------------------- 1 | 基于django的微信基础模块 2 | ======================== 3 | 4 | 一个基于django的微信基础功能模块 5 | 6 | 快速开始: 7 | --------- 8 | 9 | 安装依赖模块: 10 | 11 | .. code-block:: 12 | 13 | pip install xmltodict 14 | 15 | 安装wechat: 16 | 17 | .. code-block:: 18 | 19 | pip install git+https://github.com/ChanMo/django_wechat.git 20 | 21 | 把wechat模块添加到你的settings.py里面: 22 | 23 | .. code-block:: 24 | 25 | INSTALLED_APPS = ( 26 | ... 27 | 'wechat', 28 | ... 29 | ) 30 | 31 | 在settings.py里面添加微信设置信息: 32 | 33 | .. code-block:: 34 | 35 | # wechat config 36 | WECHAT_APPID = 'test' 37 | WECHAT_APPSECRET = 'test' 38 | WECHAT_TOKEN = 'yourtoken' 39 | WECHAT_MCH_ID = 'test' 40 | WECHAT_KEY = 'test' 41 | WECHAT_JS_DEBUG = 'test' 42 | WECHAT_JS_APILIST = ['test'] 43 | 44 | 在urls.py里面添加微信接口: 45 | 46 | .. code-block:: 47 | 48 | url(r'^wx/', include('wechat.urls')), 49 | 50 | 添加数据表: 51 | 52 | .. code-block:: 53 | 54 | python manage.py migrate 55 | 56 | 使用微信开发者模块: 57 | 58 | 接口地址为:http://yourdomain/wx/ 59 | token为: yourtoken 60 | 61 | 62 | 版本更改: 63 | --------- 64 | - v0.3 使js配置信息可编辑,添加Qrcode类 65 | - v0.2 添加WxMemberView 66 | - v0.1 第一版 67 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/start.txt: -------------------------------------------------------------------------------- 1 | 基于django的微信基础模块 2 | ======================== 3 | 4 | 一个基于django的微信基础功能模块 5 | 6 | 快速开始: 7 | --------- 8 | 9 | 安装依赖模块: 10 | 11 | .. code-block:: 12 | 13 | pip install xmltodict 14 | 15 | 安装wechat: 16 | 17 | .. code-block:: 18 | 19 | pip install git+https://github.com/ChanMo/django_wechat.git 20 | 21 | 把wechat模块添加到你的settings.py里面: 22 | 23 | .. code-block:: 24 | 25 | INSTALLED_APPS = ( 26 | ... 27 | 'wechat', 28 | ... 29 | ) 30 | 31 | 在settings.py里面添加微信设置信息: 32 | 33 | .. code-block:: 34 | 35 | # wechat config 36 | WECHAT_APPID = 'test' 37 | WECHAT_APPSECRET = 'test' 38 | WECHAT_TOKEN = 'yourtoken' 39 | WECHAT_MCH_ID = 'test' 40 | WECHAT_KEY = 'test' 41 | WECHAT_JS_DEBUG = 'test' 42 | WECHAT_JS_APILIST = ['test'] 43 | 44 | 在urls.py里面添加微信接口: 45 | 46 | .. code-block:: 47 | 48 | url(r'^wx/', include('wechat.urls')), 49 | 50 | 添加数据表: 51 | 52 | .. code-block:: 53 | 54 | python manage.py migrate 55 | 56 | 使用微信开发者模块: 57 | 58 | 接口地址为:http://yourdomain/wx/ 59 | token为: yourtoken 60 | 61 | 62 | 版本更改: 63 | --------- 64 | - v0.3 使js配置信息可编辑,添加Qrcode类 65 | - v0.2 添加WxMemberView 66 | - v0.1 第一版 67 | -------------------------------------------------------------------------------- /docs/_build_html/_sources/start.txt: -------------------------------------------------------------------------------- 1 | 基于django的微信基础模块 2 | ======================== 3 | 4 | 一个基于django的微信基础功能模块 5 | 6 | 快速开始: 7 | --------- 8 | 9 | 安装依赖模块: 10 | 11 | .. code-block:: 12 | 13 | pip install xmltodict 14 | 15 | 安装wechat: 16 | 17 | .. code-block:: 18 | 19 | pip install git+https://github.com/ChanMo/django_wechat.git 20 | 21 | 把wechat模块添加到你的settings.py里面: 22 | 23 | .. code-block:: 24 | 25 | INSTALLED_APPS = ( 26 | ... 27 | 'wechat', 28 | ... 29 | ) 30 | 31 | 在settings.py里面添加微信设置信息: 32 | 33 | .. code-block:: 34 | 35 | # wechat config 36 | WECHAT_APPID = 'test' 37 | WECHAT_APPSECRET = 'test' 38 | WECHAT_TOKEN = 'yourtoken' 39 | WECHAT_MCH_ID = 'test' 40 | WECHAT_KEY = 'test' 41 | WECHAT_JS_DEBUG = 'test' 42 | WECHAT_JS_APILIST = ['test'] 43 | 44 | 在urls.py里面添加微信接口: 45 | 46 | .. code-block:: 47 | 48 | url(r'^wx/', include('wechat.urls')), 49 | 50 | 添加数据表: 51 | 52 | .. code-block:: 53 | 54 | python manage.py migrate 55 | 56 | 使用微信开发者模块: 57 | 58 | 接口地址为:http://yourdomain/wx/ 59 | token为: yourtoken 60 | 61 | 62 | 版本更改: 63 | --------- 64 | - v0.3 使js配置信息可编辑,添加Qrcode类 65 | - v0.2 添加WxMemberView 66 | - v0.1 第一版 67 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import os 2 | from setuptools import setup 3 | 4 | with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme: 5 | README = readme.read() 6 | 7 | # allow setup.py to be run from any path 8 | os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) 9 | 10 | setup( 11 | name = 'django-wechat-base', 12 | version = '0.4.5', 13 | packages = ['wechat'], 14 | include_package_data = True, 15 | install_requires = ['xmltodict>=0.9.2'], 16 | license = 'BSD License', 17 | description = 'A simple wechat api model.', 18 | long_description = README, 19 | url = 'https://github.com/ChanMo/django_wechat/', 20 | author = 'ChanMo', 21 | author_email = 'chen.orange@aliyun.com', 22 | classifiers = [ 23 | 'Environment :: Web Environment', 24 | 'Framework :: Django', 25 | 'Intended Audience :: Developers', 26 | 'License :: OSI Approved :: BSD License', # example license 27 | 'Operating System :: OS Independent', 28 | 'Programming Language :: Python', 29 | # Replace these appropriately if you are stuck on Python 2. 30 | 'Programming Language :: Python :: 3', 31 | 'Programming Language :: Python :: 3.2', 32 | 'Programming Language :: Python :: 3.3', 33 | 'Topic :: Internet :: WWW/HTTP', 34 | 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', 35 | ], 36 | ) 37 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | .. django_wechat documentation master file, created by 2 | sphinx-quickstart on Sat Apr 9 15:12:39 2016. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | django_wechat 7 | ============= 8 | 9 | django_wechat 是一个基于django的微信基础模块,提供了微信的最基础接口功能. 10 | 11 | 功能 12 | ----- 13 | 14 | - 关注回复(关键字为"关注") 15 | - 默认回复(关键字为"默认") 16 | - 文本回复 17 | - 单图文回复 18 | - 自定义菜单 19 | 20 | 使用方法 21 | --------- 22 | 23 | 安装依赖模块:: 24 | 25 | pip install xmltodict 26 | 27 | 安装wechat:: 28 | 29 | pip install git+https://github.com/ChanMo/django_wechat.git 30 | 31 | 把wechat模块添加到你的settings.py里面:: 32 | 33 | INSTALLED_APPS = ( 34 | ... 35 | 'wechat', 36 | ... 37 | ) 38 | 39 | 40 | 在settings.py里面添加微信设置信息:: 41 | 42 | # wechat config 43 | WECHAT_APPID = 'test' 44 | WECHAT_APPSECRET = 'test' 45 | WECHAT_TOKEN = 'yourtoken' 46 | WECHAT_MCH_ID = 'test' 47 | WECHAT_KEY = 'test' 48 | WECHAT_JS_DEBUG = 'test' 49 | WECHAT_JS_APILIST = ['test'] 50 | 51 | 在urls.py里面添加微信接口:: 52 | 53 | url(r'^wx/', include('wechat.urls')), 54 | 55 | 添加数据表:: 56 | 57 | python manage.py migrate 58 | 59 | 使用微信开发者模块:: 60 | 61 | 接口地址为:http://yourdomain/wx/ 62 | token为: yourtoken 63 | 64 | 65 | api模块 66 | -------- 67 | 68 | - Base 69 | - Menu 70 | - Push 71 | - Reponse 72 | - Member 73 | - Pay 74 | - Js 75 | - Qrcode 76 | 77 | 78 | 开发者 79 | ------- 80 | 81 | - chanmo: http://www.findchen.com/ 82 | 83 | 版本更改 84 | --------- 85 | - v0.3 使js配置信息可编辑,添加Qrcode类 86 | - v0.2 添加WxMemberView 87 | - v0.1 第一版 88 | -------------------------------------------------------------------------------- /docs/_build/html/_sources/index.txt: -------------------------------------------------------------------------------- 1 | .. django_wechat documentation master file, created by 2 | sphinx-quickstart on Sat Apr 9 15:12:39 2016. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | django_wechat 7 | ============= 8 | 9 | django_wechat 是一个基于django的微信基础模块,提供了微信的最基础接口功能. 10 | 11 | 功能 12 | ----- 13 | 14 | - 关注回复(关键字为"关注") 15 | - 默认回复(关键字为"默认") 16 | - 文本回复 17 | - 单图文回复 18 | - 自定义菜单 19 | 20 | 使用方法 21 | --------- 22 | 23 | 安装依赖模块:: 24 | 25 | pip install xmltodict 26 | 27 | 安装wechat:: 28 | 29 | pip install git+https://github.com/ChanMo/django_wechat.git 30 | 31 | 把wechat模块添加到你的settings.py里面:: 32 | 33 | INSTALLED_APPS = ( 34 | ... 35 | 'wechat', 36 | ... 37 | ) 38 | 39 | 40 | 在settings.py里面添加微信设置信息:: 41 | 42 | # wechat config 43 | WECHAT_APPID = 'test' 44 | WECHAT_APPSECRET = 'test' 45 | WECHAT_TOKEN = 'yourtoken' 46 | WECHAT_MCH_ID = 'test' 47 | WECHAT_KEY = 'test' 48 | WECHAT_JS_DEBUG = 'test' 49 | WECHAT_JS_APILIST = ['test'] 50 | 51 | 在urls.py里面添加微信接口:: 52 | 53 | url(r'^wx/', include('wechat.urls')), 54 | 55 | 添加数据表:: 56 | 57 | python manage.py migrate 58 | 59 | 使用微信开发者模块:: 60 | 61 | 接口地址为:http://yourdomain/wx/ 62 | token为: yourtoken 63 | 64 | 65 | api模块 66 | -------- 67 | 68 | - Base 69 | - Menu 70 | - Push 71 | - Reponse 72 | - Member 73 | - Pay 74 | - Js 75 | - Qrcode 76 | 77 | 78 | 开发者 79 | ------- 80 | 81 | - chanmo: http://www.findchen.com/ 82 | 83 | 版本更改 84 | --------- 85 | - v0.3 使js配置信息可编辑,添加Qrcode类 86 | - v0.2 添加WxMemberView 87 | - v0.1 第一版 88 | -------------------------------------------------------------------------------- /docs/_build_html/_sources/index.txt: -------------------------------------------------------------------------------- 1 | .. django_wechat documentation master file, created by 2 | sphinx-quickstart on Sat Apr 9 15:12:39 2016. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | django_wechat 7 | ============= 8 | 9 | django_wechat 是一个基于django的微信基础模块,提供了微信的最基础接口功能. 10 | 11 | 功能: 12 | ----- 13 | 14 | - 关注回复(关键字为"关注") 15 | - 默认回复(关键字为"默认") 16 | - 文本回复 17 | - 单图文回复 18 | - 自定义菜单 19 | 20 | 使用方法: 21 | --------- 22 | 23 | 安装依赖模块:: 24 | 25 | pip install xmltodict 26 | 27 | 安装wechat:: 28 | 29 | pip install git+https://github.com/ChanMo/django_wechat.git 30 | 31 | 把wechat模块添加到你的settings.py里面:: 32 | 33 | INSTALLED_APPS = ( 34 | ... 35 | 'wechat', 36 | ... 37 | ) 38 | 39 | 40 | 在settings.py里面添加微信设置信息:: 41 | 42 | # wechat config 43 | WECHAT_APPID = 'test' 44 | WECHAT_APPSECRET = 'test' 45 | WECHAT_TOKEN = 'yourtoken' 46 | WECHAT_MCH_ID = 'test' 47 | WECHAT_KEY = 'test' 48 | WECHAT_JS_DEBUG = 'test' 49 | WECHAT_JS_APILIST = ['test'] 50 | 51 | 在urls.py里面添加微信接口:: 52 | 53 | url(r'^wx/', include('wechat.urls')), 54 | 55 | 添加数据表:: 56 | 57 | python manage.py migrate 58 | 59 | 使用微信开发者模块:: 60 | 61 | 接口地址为:http://yourdomain/wx/ 62 | token为: yourtoken 63 | 64 | 65 | api模块: 66 | -------- 67 | 68 | - Base 69 | - Menu 70 | - Push 71 | - Reponse 72 | - Member 73 | - Pay 74 | - Js 75 | - Qrcode 76 | 77 | 78 | 开发者: 79 | ------- 80 | 81 | - chanmo: http://www.findchen.com/ 82 | 83 | 版本更改: 84 | --------- 85 | - v0.3 使js配置信息可编辑,添加Qrcode类 86 | - v0.2 添加WxMemberView 87 | - v0.1 第一版 88 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | 基于django的微信基础模块 2 | ======================== 3 | 4 | 此版本已停止更新,把功能进行拆分,分为 `django-wechat-base `_,`django-wechat-message `_,`django-wechat-menu `_,同时 `django-wechat-member `_, `django-wechat-pay `_, `django-wechat-qrcode `_ 等模块也进行相应更新。 5 | 6 | .. image:: https://readthedocs.org/projects/django-wechat/badge/?version=latest 7 | :target: http://django-wechat.readthedocs.org/zh_CN/latest/?badge=latest 8 | :alt: Documentation Status 9 | 10 | 一个基于django的微信基础功能模块 11 | 12 | 快速开始: 13 | --------- 14 | 15 | 安装wechat: 16 | 17 | .. code-block:: 18 | 19 | pip install django-wechat-base 20 | 21 | 把wechat模块添加到你的settings.py里面: 22 | 23 | .. code-block:: 24 | 25 | INSTALLED_APPS = ( 26 | ... 27 | 'wechat', 28 | ... 29 | ) 30 | 31 | 在settings.py里面添加微信设置信息: 32 | 33 | .. code-block:: 34 | 35 | # wechat config 36 | WECHAT_APPID = 'test' 37 | WECHAT_APPSECRET = 'test' 38 | WECHAT_TOKEN = 'yourtoken' 39 | WECHAT_MCH_ID = 'test' 40 | WECHAT_KEY = 'test' 41 | WECHAT_JS_DEBUG = 'test' 42 | WECHAT_JS_APILIST = ['test'] 43 | 44 | 在urls.py里面添加微信接口: 45 | 46 | .. code-block:: 47 | 48 | url(r'^wx/', include('wechat.urls')), 49 | 50 | 添加数据表: 51 | 52 | .. code-block:: 53 | 54 | python manage.py migrate 55 | 56 | 使用微信开发者模块: 57 | 58 | 接口地址为:http://yourdomain/wx/ 59 | token为: yourtoken 60 | 61 | 62 | 63 | 版本更改: 64 | --------- 65 | - v0.4 添加多语言支持 66 | - v0.3 使js配置信息可编辑,添加Qrcode类 67 | - v0.2 添加WxMemberView 68 | - v0.1 第一版 69 | -------------------------------------------------------------------------------- /wechat/admin.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | from django.utils.translation import ugettext_lazy as _ 4 | from django.contrib import admin 5 | from django.contrib import messages 6 | from . import models 7 | from .models import Menu, Text, News 8 | from django.conf.urls import patterns, include, url 9 | from django.http import HttpResponseRedirect 10 | from . import api 11 | 12 | 13 | class MenuAdmin(admin.ModelAdmin): 14 | list_display = ('name', 'top', 'type', 'value') 15 | 16 | def get_urls(self): 17 | urls = super(MenuAdmin, self).get_urls() 18 | my_urls = [ 19 | url(r"^sync/$", self.sync_menu), 20 | ] 21 | return my_urls + urls 22 | 23 | def sync_menu(self, request): 24 | menu_list = models.menu_list() 25 | wx = api.Menu() 26 | content = wx.sync_menu(menu_list) 27 | if content['errcode'] == 0: 28 | messages.add_message(request, messages.SUCCESS,\ 29 | _('wechat menu sync success')) 30 | else: 31 | messages.add_message(request, messages.ERROR,\ 32 | _('wechat menu sync error')) 33 | return HttpResponseRedirect('/admin/wechat/menu/') 34 | #return HttpResponse(json.dumps(content)) 35 | 36 | def get_form(self, request, obj=None, **kwargs): 37 | form = super(MenuAdmin, self).get_form(request, obj, **kwargs) 38 | form.base_fields['top'].queryset = Menu.objects.filter(top=None) 39 | return form 40 | 41 | 42 | class TextAdmin(admin.ModelAdmin): 43 | list_display = ('keyword', 'content', 'updated') 44 | 45 | class NewsAdmin(admin.ModelAdmin): 46 | list_display = ('keyword', 'title', 'description', 'updated') 47 | 48 | 49 | admin.site.register(Menu, MenuAdmin) 50 | admin.site.register(Text, TextAdmin) 51 | admin.site.register(News, NewsAdmin) 52 | -------------------------------------------------------------------------------- /docs/_build_html/searchindex.js: -------------------------------------------------------------------------------- 1 | Search.setIndex({envversion:46,filenames:["index","intro","start"],objects:{},objnames:{},objtypes:{},terms:{"\u4e00\u4e2a\u57fa\u4e8edjango\u7684\u5fae\u4fe1\u57fa\u7840\u529f\u80fd\u6a21\u5757":2,"\u4f7f\u7528\u5fae\u4fe1\u5f00\u53d1\u8005\u6a21\u5757":[0,2],"\u4f7fjs\u914d\u7f6e\u4fe1\u606f\u53ef\u7f16\u8f91":[0,2],"\u5173\u6ce8":0,"\u5173\u6ce8\u56de\u590d":0,"\u5173\u952e\u5b57\u4e3a":0,"\u5355\u56fe\u6587\u56de\u590d":0,"\u5728set":[0,2],"\u5728url":[0,2],"\u5b89\u88c5\u4f9d\u8d56\u6a21\u5757":[0,2],"\u5b89\u88c5wechat":[0,2],"\u628awechat\u6a21\u5757\u6dfb\u52a0\u5230\u4f60\u7684set":[0,2],"\u63a5\u53e3\u5730\u5740\u4e3a":[0,2],"\u63d0\u4f9b\u4e86\u5fae\u4fe1\u7684\u6700\u57fa\u7840\u63a5\u53e3\u529f\u80fd":0,"\u6587\u672c\u56de\u590d":0,"\u662f\u4e00\u4e2a\u57fa\u4e8edjango\u7684\u5fae\u4fe1\u57fa\u7840\u6a21\u5757":0,"\u6dfb\u52a0\u6570\u636e\u8868":[0,2],"\u6dfb\u52a0qrcode\u7c7b":[0,2],"\u6dfb\u52a0wxmemberview":[0,2],"\u7b2c\u4e00\u7248":[0,2],"\u81ea\u5b9a\u4e49\u83dc\u5355":0,"\u9ed8\u8ba4":0,"\u9ed8\u8ba4\u56de\u590d":0,"py\u91cc\u9762":[0,2],"py\u91cc\u9762\u6dfb\u52a0\u5fae\u4fe1\u63a5\u53e3":[0,2],"py\u91cc\u9762\u6dfb\u52a0\u5fae\u4fe1\u8bbe\u7f6e\u4fe1\u606f":[0,2],"token\u4e3a":[0,2],base:0,chanmo:0,com:0,config:0,findchen:0,git:0,github:0,http:[0,2],includ:0,instal:0,installed_app:0,manag:0,member:0,menu:0,migrat:0,pai:0,pip:0,push:0,python:0,qrcode:0,repons:0,test:0,url:0,wechat:0,wechat_appid:0,wechat_appsecret:0,wechat_js_apilist:0,wechat_js_debug:0,wechat_kei:0,wechat_mch_id:0,wechat_token:0,www:0,xmltodict:0,yourdomain:[0,2],yourtoken:[0,2]},titles:["django_wechat","Intro","\u57fa\u4e8edjango\u7684\u5fae\u4fe1\u57fa\u7840\u6a21\u5757"],titleterms:{"\u4f7f\u7528\u65b9\u6cd5":0,"\u529f\u80fd":0,"\u57fa\u4e8edjango\u7684\u5fae\u4fe1\u57fa\u7840\u6a21\u5757":2,"\u5f00\u53d1\u8005":0,"\u5feb\u901f\u5f00\u59cb":2,"\u7248\u672c\u66f4\u6539":[0,2],"api\u6a21\u5757":0,django_wechat:0,intro:1}}) -------------------------------------------------------------------------------- /docs/_build/html/searchindex.js: -------------------------------------------------------------------------------- 1 | Search.setIndex({envversion:46,filenames:["index","start"],objects:{},objnames:{},objtypes:{},terms:{"\u4e00\u4e2a\u57fa\u4e8edjango\u7684\u5fae\u4fe1\u57fa\u7840\u529f\u80fd\u6a21\u5757":1,"\u4f7f\u7528\u5fae\u4fe1\u5f00\u53d1\u8005\u6a21\u5757":[0,1],"\u4f7fjs\u914d\u7f6e\u4fe1\u606f\u53ef\u7f16\u8f91":[0,1],"\u5173\u6ce8":0,"\u5173\u6ce8\u56de\u590d":0,"\u5173\u952e\u5b57\u4e3a":0,"\u5355\u56fe\u6587\u56de\u590d":0,"\u5728set":[0,1],"\u5728url":[0,1],"\u5b89\u88c5\u4f9d\u8d56\u6a21\u5757":[0,1],"\u5b89\u88c5wechat":[0,1],"\u628awechat\u6a21\u5757\u6dfb\u52a0\u5230\u4f60\u7684set":[0,1],"\u63a5\u53e3\u5730\u5740\u4e3a":[0,1],"\u63d0\u4f9b\u4e86\u5fae\u4fe1\u7684\u6700\u57fa\u7840\u63a5\u53e3\u529f\u80fd":0,"\u6587\u672c\u56de\u590d":0,"\u662f\u4e00\u4e2a\u57fa\u4e8edjango\u7684\u5fae\u4fe1\u57fa\u7840\u6a21\u5757":0,"\u6dfb\u52a0\u6570\u636e\u8868":[0,1],"\u6dfb\u52a0qrcode\u7c7b":[0,1],"\u6dfb\u52a0wxmemberview":[0,1],"\u7b2c\u4e00\u7248":[0,1],"\u81ea\u5b9a\u4e49\u83dc\u5355":0,"\u9ed8\u8ba4":0,"\u9ed8\u8ba4\u56de\u590d":0,"py\u91cc\u9762":[0,1],"py\u91cc\u9762\u6dfb\u52a0\u5fae\u4fe1\u63a5\u53e3":[0,1],"py\u91cc\u9762\u6dfb\u52a0\u5fae\u4fe1\u8bbe\u7f6e\u4fe1\u606f":[0,1],"token\u4e3a":[0,1],base:0,chanmo:0,com:0,config:0,content:[],findchen:0,git:0,github:0,http:[0,1],includ:0,index:[],instal:0,installed_app:0,manag:0,member:0,menu:0,migrat:0,modul:[],page:[],pai:0,pip:0,push:0,python:0,qrcode:0,repons:0,search:[],test:0,url:0,wechat:0,wechat_appid:0,wechat_appsecret:0,wechat_js_apilist:0,wechat_js_debug:0,wechat_kei:0,wechat_mch_id:0,wechat_token:0,www:0,xmltodict:0,yourdomain:[0,1],yourtoken:[0,1]},titles:["django_wechat","\u57fa\u4e8edjango\u7684\u5fae\u4fe1\u57fa\u7840\u6a21\u5757"],titleterms:{"\u4f7f\u7528\u65b9\u6cd5":0,"\u529f\u80fd":0,"\u57fa\u4e8edjango\u7684\u5fae\u4fe1\u57fa\u7840\u6a21\u5757":1,"\u5f00\u53d1\u8005":0,"\u5feb\u901f\u5f00\u59cb":1,"\u7248\u672c\u66f4\u6539":[0,1],"api\u6a21\u5757":0,django_wechat:0,document:[],indic:[],tabl:[],welcom:[]}}) -------------------------------------------------------------------------------- /wechat/locale/zh_Hans/LC_MESSAGES/django.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2016-05-18 16:19+0800\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=1; plural=0;\n" 20 | 21 | #: admin.py:29 22 | msgid "wechat menu sync success" 23 | msgstr "菜单更新成功" 24 | 25 | #: admin.py:32 26 | msgid "wechat menu sync error" 27 | msgstr "菜单更新失败" 28 | 29 | #: apps.py:6 30 | msgid "wechat" 31 | msgstr "微信" 32 | 33 | #: models.py:7 models.py:12 34 | msgid "root menu" 35 | msgstr "主菜单" 36 | 37 | #: models.py:8 38 | msgid "view menu" 39 | msgstr "网页链接" 40 | 41 | #: models.py:9 42 | msgid "click menu" 43 | msgstr "消息回复" 44 | 45 | #: models.py:13 46 | msgid "name" 47 | msgstr "名称" 48 | 49 | #: models.py:14 50 | msgid "type" 51 | msgstr "类型" 52 | 53 | #: models.py:16 54 | msgid "value" 55 | msgstr "值" 56 | 57 | #: models.py:18 58 | msgid "sort" 59 | msgstr "排序" 60 | 61 | #: models.py:25 62 | msgid "menu" 63 | msgstr "菜单" 64 | 65 | #: models.py:26 66 | msgid "menus" 67 | msgstr "菜单" 68 | 69 | #: models.py:31 models.py:46 70 | msgid "keyword" 71 | msgstr "关键字" 72 | 73 | #: models.py:32 74 | msgid "content" 75 | msgstr "内容" 76 | 77 | #: models.py:33 models.py:51 78 | msgid "created time" 79 | msgstr "创建时间" 80 | 81 | #: models.py:34 models.py:52 82 | msgid "updated time" 83 | msgstr "更新时间" 84 | 85 | #: models.py:40 models.py:41 86 | msgid "text response" 87 | msgstr "文本回复" 88 | 89 | #: models.py:47 90 | msgid "title" 91 | msgstr "标题" 92 | 93 | #: models.py:48 94 | msgid "description" 95 | msgstr "描述" 96 | 97 | #: models.py:49 98 | msgid "image" 99 | msgstr "图片" 100 | 101 | #: models.py:50 102 | msgid "link" 103 | msgstr "链接" 104 | 105 | #: models.py:58 models.py:59 106 | msgid "news response" 107 | msgstr "图文回复" 108 | 109 | #: templates/admin/wechat/menu/change_list.html:6 110 | msgid "upload menu" 111 | msgstr "上传菜单" 112 | -------------------------------------------------------------------------------- /django_wechat.egg-info/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 1.1 2 | Name: django-wechat 3 | Version: 0.3.1 4 | Summary: A simple wechat api model. 5 | Home-page: https://github.com/ChanMo/django_wechat/ 6 | Author: ChanMo 7 | Author-email: chen.orange@aliyun.com 8 | License: BSD License 9 | Description: 基于django的微信基础模块 10 | ======================== 11 | 12 | .. image:: https://readthedocs.org/projects/django-wechat/badge/?version=latest 13 | :target: http://django-wechat.readthedocs.org/zh_CN/latest/?badge=latest 14 | :alt: Documentation Status 15 | 16 | 一个基于django的微信基础功能模块 17 | 18 | 快速开始: 19 | --------- 20 | 21 | 安装wechat: 22 | 23 | .. code-block:: 24 | 25 | pip install django-wechat 26 | 27 | 把wechat模块添加到你的settings.py里面: 28 | 29 | .. code-block:: 30 | 31 | INSTALLED_APPS = ( 32 | ... 33 | 'wechat', 34 | ... 35 | ) 36 | 37 | 在settings.py里面添加微信设置信息: 38 | 39 | .. code-block:: 40 | 41 | # wechat config 42 | WECHAT_APPID = 'test' 43 | WECHAT_APPSECRET = 'test' 44 | WECHAT_TOKEN = 'yourtoken' 45 | WECHAT_MCH_ID = 'test' 46 | WECHAT_KEY = 'test' 47 | WECHAT_JS_DEBUG = 'test' 48 | WECHAT_JS_APILIST = ['test'] 49 | 50 | 在urls.py里面添加微信接口: 51 | 52 | .. code-block:: 53 | 54 | url(r'^wx/', include('wechat.urls')), 55 | 56 | 添加数据表: 57 | 58 | .. code-block:: 59 | 60 | python manage.py migrate 61 | 62 | 使用微信开发者模块: 63 | 64 | 接口地址为:http://yourdomain/wx/ 65 | token为: yourtoken 66 | 67 | 68 | 69 | 版本更改: 70 | --------- 71 | - v0.3 使js配置信息可编辑,添加Qrcode类 72 | - v0.2 添加WxMemberView 73 | - v0.1 第一版 74 | 75 | Platform: UNKNOWN 76 | Classifier: Environment :: Web Environment 77 | Classifier: Framework :: Django 78 | Classifier: Intended Audience :: Developers 79 | Classifier: License :: OSI Approved :: BSD License 80 | Classifier: Operating System :: OS Independent 81 | Classifier: Programming Language :: Python 82 | Classifier: Programming Language :: Python :: 3 83 | Classifier: Programming Language :: Python :: 3.2 84 | Classifier: Programming Language :: Python :: 3.3 85 | Classifier: Topic :: Internet :: WWW/HTTP 86 | Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content 87 | -------------------------------------------------------------------------------- /django_wechat_api.egg-info/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 1.1 2 | Name: django-wechat-api 3 | Version: 0.3.2 4 | Summary: A simple wechat api model. 5 | Home-page: https://github.com/ChanMo/django_wechat/ 6 | Author: ChanMo 7 | Author-email: chen.orange@aliyun.com 8 | License: BSD License 9 | Description: 基于django的微信基础模块 10 | ======================== 11 | 12 | .. image:: https://readthedocs.org/projects/django-wechat/badge/?version=latest 13 | :target: http://django-wechat.readthedocs.org/zh_CN/latest/?badge=latest 14 | :alt: Documentation Status 15 | 16 | 一个基于django的微信基础功能模块 17 | 18 | 快速开始: 19 | --------- 20 | 21 | 安装wechat: 22 | 23 | .. code-block:: 24 | 25 | pip install django-wechat-api 26 | 27 | 把wechat模块添加到你的settings.py里面: 28 | 29 | .. code-block:: 30 | 31 | INSTALLED_APPS = ( 32 | ... 33 | 'wechat', 34 | ... 35 | ) 36 | 37 | 在settings.py里面添加微信设置信息: 38 | 39 | .. code-block:: 40 | 41 | # wechat config 42 | WECHAT_APPID = 'test' 43 | WECHAT_APPSECRET = 'test' 44 | WECHAT_TOKEN = 'yourtoken' 45 | WECHAT_MCH_ID = 'test' 46 | WECHAT_KEY = 'test' 47 | WECHAT_JS_DEBUG = 'test' 48 | WECHAT_JS_APILIST = ['test'] 49 | 50 | 在urls.py里面添加微信接口: 51 | 52 | .. code-block:: 53 | 54 | url(r'^wx/', include('wechat.urls')), 55 | 56 | 添加数据表: 57 | 58 | .. code-block:: 59 | 60 | python manage.py migrate 61 | 62 | 使用微信开发者模块: 63 | 64 | 接口地址为:http://yourdomain/wx/ 65 | token为: yourtoken 66 | 67 | 68 | 69 | 版本更改: 70 | --------- 71 | - v0.3 使js配置信息可编辑,添加Qrcode类 72 | - v0.2 添加WxMemberView 73 | - v0.1 第一版 74 | 75 | Platform: UNKNOWN 76 | Classifier: Environment :: Web Environment 77 | Classifier: Framework :: Django 78 | Classifier: Intended Audience :: Developers 79 | Classifier: License :: OSI Approved :: BSD License 80 | Classifier: Operating System :: OS Independent 81 | Classifier: Programming Language :: Python 82 | Classifier: Programming Language :: Python :: 3 83 | Classifier: Programming Language :: Python :: 3.2 84 | Classifier: Programming Language :: Python :: 3.3 85 | Classifier: Topic :: Internet :: WWW/HTTP 86 | Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content 87 | -------------------------------------------------------------------------------- /django_wechat_base.egg-info/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 1.1 2 | Name: django-wechat-base 3 | Version: 0.4.5 4 | Summary: A simple wechat api model. 5 | Home-page: https://github.com/ChanMo/django_wechat/ 6 | Author: ChanMo 7 | Author-email: chen.orange@aliyun.com 8 | License: BSD License 9 | Description: 基于django的微信基础模块 10 | ======================== 11 | 12 | .. image:: https://readthedocs.org/projects/django-wechat/badge/?version=latest 13 | :target: http://django-wechat.readthedocs.org/zh_CN/latest/?badge=latest 14 | :alt: Documentation Status 15 | 16 | 一个基于django的微信基础功能模块 17 | 18 | 快速开始: 19 | --------- 20 | 21 | 安装wechat: 22 | 23 | .. code-block:: 24 | 25 | pip install django-wechat-base 26 | 27 | 把wechat模块添加到你的settings.py里面: 28 | 29 | .. code-block:: 30 | 31 | INSTALLED_APPS = ( 32 | ... 33 | 'wechat', 34 | ... 35 | ) 36 | 37 | 在settings.py里面添加微信设置信息: 38 | 39 | .. code-block:: 40 | 41 | # wechat config 42 | WECHAT_APPID = 'test' 43 | WECHAT_APPSECRET = 'test' 44 | WECHAT_TOKEN = 'yourtoken' 45 | WECHAT_MCH_ID = 'test' 46 | WECHAT_KEY = 'test' 47 | WECHAT_JS_DEBUG = 'test' 48 | WECHAT_JS_APILIST = ['test'] 49 | 50 | 在urls.py里面添加微信接口: 51 | 52 | .. code-block:: 53 | 54 | url(r'^wx/', include('wechat.urls')), 55 | 56 | 添加数据表: 57 | 58 | .. code-block:: 59 | 60 | python manage.py migrate 61 | 62 | 使用微信开发者模块: 63 | 64 | 接口地址为:http://yourdomain/wx/ 65 | token为: yourtoken 66 | 67 | 68 | 69 | 版本更改: 70 | --------- 71 | - v0.4 添加多语言支持 72 | - v0.3 使js配置信息可编辑,添加Qrcode类 73 | - v0.2 添加WxMemberView 74 | - v0.1 第一版 75 | 76 | Platform: UNKNOWN 77 | Classifier: Environment :: Web Environment 78 | Classifier: Framework :: Django 79 | Classifier: Intended Audience :: Developers 80 | Classifier: License :: OSI Approved :: BSD License 81 | Classifier: Operating System :: OS Independent 82 | Classifier: Programming Language :: Python 83 | Classifier: Programming Language :: Python :: 3 84 | Classifier: Programming Language :: Python :: 3.2 85 | Classifier: Programming Language :: Python :: 3.3 86 | Classifier: Topic :: Internet :: WWW/HTTP 87 | Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content 88 | -------------------------------------------------------------------------------- /docs/_build/html/_static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}} 2 | /*# sourceMappingURL=badge_only.css.map */ 3 | -------------------------------------------------------------------------------- /docs/_build_html/_static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}} 2 | /*# sourceMappingURL=badge_only.css.map */ 3 | -------------------------------------------------------------------------------- /wechat/models.py: -------------------------------------------------------------------------------- 1 | import json 2 | from django.utils.translation import ugettext_lazy as _ 3 | from django.db import models 4 | 5 | class Menu(models.Model): 6 | TYPE_CHOICES = ( 7 | ('null', _('root menu')), 8 | ('view', _('view menu')), 9 | ('click', _('click menu')), 10 | ) 11 | top = models.ForeignKey('self', related_name='children', blank=True,\ 12 | null=True, default=None, verbose_name=_('root menu')) 13 | name = models.CharField(_('name'), max_length=100) 14 | type = models.CharField(_('type'), max_length=20, choices=TYPE_CHOICES,\ 15 | default='view') 16 | value = models.CharField(_('value'), max_length=200, blank=True,\ 17 | null=True, default='') 18 | sort = models.PositiveIntegerField(_('sort'), blank=True, null=True,\ 19 | default=0) 20 | 21 | def __unicode__(self): 22 | return self.name 23 | 24 | class Meta(object): 25 | verbose_name = _('menu') 26 | verbose_name_plural = _('menus') 27 | ordering = ['sort'] 28 | 29 | 30 | class Text(models.Model): 31 | keyword = models.CharField(_('keyword'), max_length=20) 32 | content = models.TextField(_('content')) 33 | created = models.DateTimeField(_('created time'), auto_now_add=True) 34 | updated = models.DateTimeField(_('updated time'), auto_now=True) 35 | 36 | def __unicode__(self): 37 | return self.keyword 38 | 39 | class Meta(object): 40 | verbose_name = _('text response') 41 | verbose_name_plural = _('text response') 42 | ordering = ['-updated'] 43 | 44 | 45 | class News(models.Model): 46 | keyword = models.CharField(_('keyword'), max_length=20) 47 | title = models.CharField(_('title'), max_length=200) 48 | description = models.TextField(_('description')) 49 | pic = models.ImageField(_('image'), upload_to='upload/wechat/%Y/%m/%d') 50 | url = models.URLField(_('link'), max_length=200) 51 | created = models.DateTimeField(_('created time'), auto_now_add=True) 52 | updated = models.DateTimeField(_('updated time'), auto_now=True) 53 | 54 | def __unicode__(self): 55 | return self.keyword 56 | 57 | class Meta(object): 58 | verbose_name = _('news response') 59 | verbose_name_plural = _('news response') 60 | ordering = ['-updated'] 61 | 62 | 63 | def menu_list(): 64 | top = Menu.objects.order_by('sort').filter(top=None) 65 | button = {'button':[]} 66 | for i, item in enumerate(top): 67 | children = Menu.objects.order_by('sort').filter(top=item) 68 | if children: 69 | sub_button = [] 70 | for j, chil_item in enumerate(children): 71 | sub_button.append(item_menu(chil_item)) 72 | button['button'].append({ 73 | 'name': item.name, 74 | 'sub_button': sub_button, 75 | }) 76 | else: 77 | button['button'].append(item_menu(item)) 78 | button = json.dumps(button, ensure_ascii=False) 79 | button = button.encode('utf8') 80 | return button 81 | 82 | def item_menu(menu): 83 | if menu.type == 'view': 84 | button = { 85 | 'name': menu.name, 86 | 'type': menu.type, 87 | 'url': menu.value, 88 | } 89 | elif menu.type == 'click': 90 | button = { 91 | 'name': menu.name, 92 | 'type': menu.type, 93 | 'key': menu.value, 94 | } 95 | elif menu.type == 'null': 96 | button = { 97 | 'name': menu.name, 98 | } 99 | return button 100 | -------------------------------------------------------------------------------- /docs/_build/html/_static/pygments.css: -------------------------------------------------------------------------------- 1 | .highlight .hll { background-color: #ffffcc } 2 | .highlight { background: #eeffcc; } 3 | .highlight .c { color: #408090; font-style: italic } /* Comment */ 4 | .highlight .err { border: 1px solid #FF0000 } /* Error */ 5 | .highlight .k { color: #007020; font-weight: bold } /* Keyword */ 6 | .highlight .o { color: #666666 } /* Operator */ 7 | .highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ 8 | .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ 9 | .highlight .cp { color: #007020 } /* Comment.Preproc */ 10 | .highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ 11 | .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ 12 | .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ 13 | .highlight .gd { color: #A00000 } /* Generic.Deleted */ 14 | .highlight .ge { font-style: italic } /* Generic.Emph */ 15 | .highlight .gr { color: #FF0000 } /* Generic.Error */ 16 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 17 | .highlight .gi { color: #00A000 } /* Generic.Inserted */ 18 | .highlight .go { color: #333333 } /* Generic.Output */ 19 | .highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ 20 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 21 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 22 | .highlight .gt { color: #0044DD } /* Generic.Traceback */ 23 | .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ 24 | .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ 25 | .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ 26 | .highlight .kp { color: #007020 } /* Keyword.Pseudo */ 27 | .highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ 28 | .highlight .kt { color: #902000 } /* Keyword.Type */ 29 | .highlight .m { color: #208050 } /* Literal.Number */ 30 | .highlight .s { color: #4070a0 } /* Literal.String */ 31 | .highlight .na { color: #4070a0 } /* Name.Attribute */ 32 | .highlight .nb { color: #007020 } /* Name.Builtin */ 33 | .highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ 34 | .highlight .no { color: #60add5 } /* Name.Constant */ 35 | .highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ 36 | .highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ 37 | .highlight .ne { color: #007020 } /* Name.Exception */ 38 | .highlight .nf { color: #06287e } /* Name.Function */ 39 | .highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ 40 | .highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ 41 | .highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ 42 | .highlight .nv { color: #bb60d5 } /* Name.Variable */ 43 | .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ 44 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 45 | .highlight .mb { color: #208050 } /* Literal.Number.Bin */ 46 | .highlight .mf { color: #208050 } /* Literal.Number.Float */ 47 | .highlight .mh { color: #208050 } /* Literal.Number.Hex */ 48 | .highlight .mi { color: #208050 } /* Literal.Number.Integer */ 49 | .highlight .mo { color: #208050 } /* Literal.Number.Oct */ 50 | .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ 51 | .highlight .sc { color: #4070a0 } /* Literal.String.Char */ 52 | .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ 53 | .highlight .s2 { color: #4070a0 } /* Literal.String.Double */ 54 | .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ 55 | .highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ 56 | .highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ 57 | .highlight .sx { color: #c65d09 } /* Literal.String.Other */ 58 | .highlight .sr { color: #235388 } /* Literal.String.Regex */ 59 | .highlight .s1 { color: #4070a0 } /* Literal.String.Single */ 60 | .highlight .ss { color: #517918 } /* Literal.String.Symbol */ 61 | .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ 62 | .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ 63 | .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ 64 | .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ 65 | .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /docs/_build_html/_static/pygments.css: -------------------------------------------------------------------------------- 1 | .highlight .hll { background-color: #ffffcc } 2 | .highlight { background: #eeffcc; } 3 | .highlight .c { color: #408090; font-style: italic } /* Comment */ 4 | .highlight .err { border: 1px solid #FF0000 } /* Error */ 5 | .highlight .k { color: #007020; font-weight: bold } /* Keyword */ 6 | .highlight .o { color: #666666 } /* Operator */ 7 | .highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ 8 | .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ 9 | .highlight .cp { color: #007020 } /* Comment.Preproc */ 10 | .highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ 11 | .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ 12 | .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ 13 | .highlight .gd { color: #A00000 } /* Generic.Deleted */ 14 | .highlight .ge { font-style: italic } /* Generic.Emph */ 15 | .highlight .gr { color: #FF0000 } /* Generic.Error */ 16 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 17 | .highlight .gi { color: #00A000 } /* Generic.Inserted */ 18 | .highlight .go { color: #333333 } /* Generic.Output */ 19 | .highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ 20 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 21 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 22 | .highlight .gt { color: #0044DD } /* Generic.Traceback */ 23 | .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ 24 | .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ 25 | .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ 26 | .highlight .kp { color: #007020 } /* Keyword.Pseudo */ 27 | .highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ 28 | .highlight .kt { color: #902000 } /* Keyword.Type */ 29 | .highlight .m { color: #208050 } /* Literal.Number */ 30 | .highlight .s { color: #4070a0 } /* Literal.String */ 31 | .highlight .na { color: #4070a0 } /* Name.Attribute */ 32 | .highlight .nb { color: #007020 } /* Name.Builtin */ 33 | .highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ 34 | .highlight .no { color: #60add5 } /* Name.Constant */ 35 | .highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ 36 | .highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ 37 | .highlight .ne { color: #007020 } /* Name.Exception */ 38 | .highlight .nf { color: #06287e } /* Name.Function */ 39 | .highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ 40 | .highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ 41 | .highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ 42 | .highlight .nv { color: #bb60d5 } /* Name.Variable */ 43 | .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ 44 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 45 | .highlight .mb { color: #208050 } /* Literal.Number.Bin */ 46 | .highlight .mf { color: #208050 } /* Literal.Number.Float */ 47 | .highlight .mh { color: #208050 } /* Literal.Number.Hex */ 48 | .highlight .mi { color: #208050 } /* Literal.Number.Integer */ 49 | .highlight .mo { color: #208050 } /* Literal.Number.Oct */ 50 | .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ 51 | .highlight .sc { color: #4070a0 } /* Literal.String.Char */ 52 | .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ 53 | .highlight .s2 { color: #4070a0 } /* Literal.String.Double */ 54 | .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ 55 | .highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ 56 | .highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ 57 | .highlight .sx { color: #c65d09 } /* Literal.String.Other */ 58 | .highlight .sr { color: #235388 } /* Literal.String.Regex */ 59 | .highlight .s1 { color: #4070a0 } /* Literal.String.Single */ 60 | .highlight .ss { color: #517918 } /* Literal.String.Symbol */ 61 | .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ 62 | .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ 63 | .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ 64 | .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ 65 | .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /docs/_build/html/genindex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Index — django_wechat 3.0 documentation 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
    44 | 45 | 46 | 90 | 91 |
    92 | 93 | 94 | 98 | 99 | 100 | 101 |
    102 |
    103 | 104 | 105 | 106 | 107 | 108 | 109 |
    110 |
      111 |
    • Docs »
    • 112 | 113 |
    • 114 |
    • 115 | 116 | 117 | 118 |
    • 119 |
    120 |
    121 |
    122 |
    123 |
    124 | 125 | 126 |

    Index

    127 | 128 |
    129 | 130 |
    131 | 132 | 133 |
    134 |
    135 |
    136 | 137 | 138 |
    139 | 140 |
    141 |

    142 | © Copyright 2016, chanmo. 143 | 144 |

    145 |
    146 | Built with Sphinx using a theme provided by Read the Docs. 147 | 148 |
    149 | 150 |
    151 |
    152 | 153 |
    154 | 155 |
    156 | 157 | 158 | 159 | 160 | 161 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 188 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /docs/_build_html/genindex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Index — django_wechat 3.0 documentation 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
    44 | 45 | 46 | 90 | 91 |
    92 | 93 | 94 | 98 | 99 | 100 | 101 |
    102 |
    103 | 104 | 105 | 106 | 107 | 108 | 109 |
    110 |
      111 |
    • Docs »
    • 112 | 113 |
    • 114 |
    • 115 | 116 | 117 | 118 |
    • 119 |
    120 |
    121 |
    122 |
    123 |
    124 | 125 | 126 |

    Index

    127 | 128 |
    129 | 130 |
    131 | 132 | 133 |
    134 |
    135 |
    136 | 137 | 138 |
    139 | 140 |
    141 |

    142 | © Copyright 2016, chanmo. 143 | 144 |

    145 |
    146 | Built with Sphinx using a theme provided by Read the Docs. 147 | 148 |
    149 | 150 |
    151 |
    152 | 153 |
    154 | 155 |
    156 | 157 | 158 | 159 | 160 | 161 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 188 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /docs/_build_html/intro.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Intro — django_wechat 3.0 documentation 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
    43 | 44 | 45 | 92 | 93 |
    94 | 95 | 96 | 100 | 101 | 102 | 103 |
    104 |
    105 | 106 | 107 | 108 | 109 | 110 | 111 |
    112 | 124 |
    125 |
    126 |
    127 |
    128 | 129 |
    130 |

    Intro

    131 |
    132 | 133 | 134 |
    135 |
    136 |
    137 | 138 | 139 |
    140 | 141 |
    142 |

    143 | © Copyright 2016, chanmo. 144 | 145 |

    146 |
    147 | Built with Sphinx using a theme provided by Read the Docs. 148 | 149 |
    150 | 151 |
    152 |
    153 | 154 |
    155 | 156 |
    157 | 158 | 159 | 160 | 161 | 162 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 189 | 190 | 191 | 192 | -------------------------------------------------------------------------------- /django_wechat.egg-info/SOURCES.txt: -------------------------------------------------------------------------------- 1 | LICENSE 2 | MANIFEST.in 3 | README.rst 4 | setup.py 5 | django_wechat.egg-info/PKG-INFO 6 | django_wechat.egg-info/SOURCES.txt 7 | django_wechat.egg-info/dependency_links.txt 8 | django_wechat.egg-info/requires.txt 9 | django_wechat.egg-info/top_level.txt 10 | docs/Makefile 11 | docs/conf.py 12 | docs/index.rst 13 | docs/make.bat 14 | docs/start.rst 15 | docs/_build/.doctrees/index.doctree 16 | docs/_build/.doctrees/intro.doctree 17 | docs/_build/.doctrees/start.doctree 18 | docs/_build/doctrees/environment.pickle 19 | docs/_build/doctrees/index.doctree 20 | docs/_build/doctrees/start.doctree 21 | docs/_build/html/.buildinfo 22 | docs/_build/html/genindex.html 23 | docs/_build/html/index.html 24 | docs/_build/html/objects.inv 25 | docs/_build/html/search.html 26 | docs/_build/html/searchindex.js 27 | docs/_build/html/start.html 28 | docs/_build/html/_sources/index.txt 29 | docs/_build/html/_sources/start.txt 30 | docs/_build/html/_static/ajax-loader.gif 31 | docs/_build/html/_static/alabaster.css 32 | docs/_build/html/_static/basic.css 33 | docs/_build/html/_static/comment-bright.png 34 | docs/_build/html/_static/comment-close.png 35 | docs/_build/html/_static/comment.png 36 | docs/_build/html/_static/doctools.js 37 | docs/_build/html/_static/down-pressed.png 38 | docs/_build/html/_static/down.png 39 | docs/_build/html/_static/file.png 40 | docs/_build/html/_static/jquery-1.11.1.js 41 | docs/_build/html/_static/jquery.js 42 | docs/_build/html/_static/minus.png 43 | docs/_build/html/_static/plus.png 44 | docs/_build/html/_static/pygments.css 45 | docs/_build/html/_static/searchtools.js 46 | docs/_build/html/_static/underscore-1.3.1.js 47 | docs/_build/html/_static/underscore.js 48 | docs/_build/html/_static/up-pressed.png 49 | docs/_build/html/_static/up.png 50 | docs/_build/html/_static/websupport.js 51 | docs/_build/html/_static/css/badge_only.css 52 | docs/_build/html/_static/css/theme.css 53 | docs/_build/html/_static/fonts/Inconsolata-Bold.ttf 54 | docs/_build/html/_static/fonts/Inconsolata-Regular.ttf 55 | docs/_build/html/_static/fonts/Lato-Bold.ttf 56 | docs/_build/html/_static/fonts/Lato-Regular.ttf 57 | docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf 58 | docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf 59 | docs/_build/html/_static/fonts/fontawesome-webfont.eot 60 | docs/_build/html/_static/fonts/fontawesome-webfont.svg 61 | docs/_build/html/_static/fonts/fontawesome-webfont.ttf 62 | docs/_build/html/_static/fonts/fontawesome-webfont.woff 63 | docs/_build/html/_static/js/modernizr.min.js 64 | docs/_build/html/_static/js/theme.js 65 | docs/_build_html/.buildinfo 66 | docs/_build_html/genindex.html 67 | docs/_build_html/index.html 68 | docs/_build_html/intro.html 69 | docs/_build_html/objects.inv 70 | docs/_build_html/search.html 71 | docs/_build_html/searchindex.js 72 | docs/_build_html/start.html 73 | docs/_build_html/.doctrees/environment.pickle 74 | docs/_build_html/.doctrees/index.doctree 75 | docs/_build_html/.doctrees/intro.doctree 76 | docs/_build_html/.doctrees/start.doctree 77 | docs/_build_html/_sources/index.txt 78 | docs/_build_html/_sources/intro.txt 79 | docs/_build_html/_sources/start.txt 80 | docs/_build_html/_static/ajax-loader.gif 81 | docs/_build_html/_static/basic.css 82 | docs/_build_html/_static/comment-bright.png 83 | docs/_build_html/_static/comment-close.png 84 | docs/_build_html/_static/comment.png 85 | docs/_build_html/_static/doctools.js 86 | docs/_build_html/_static/down-pressed.png 87 | docs/_build_html/_static/down.png 88 | docs/_build_html/_static/file.png 89 | docs/_build_html/_static/jquery-1.11.1.js 90 | docs/_build_html/_static/jquery.js 91 | docs/_build_html/_static/minus.png 92 | docs/_build_html/_static/plus.png 93 | docs/_build_html/_static/pygments.css 94 | docs/_build_html/_static/searchtools.js 95 | docs/_build_html/_static/underscore-1.3.1.js 96 | docs/_build_html/_static/underscore.js 97 | docs/_build_html/_static/up-pressed.png 98 | docs/_build_html/_static/up.png 99 | docs/_build_html/_static/websupport.js 100 | docs/_build_html/_static/css/badge_only.css 101 | docs/_build_html/_static/css/theme.css 102 | docs/_build_html/_static/fonts/Inconsolata-Bold.ttf 103 | docs/_build_html/_static/fonts/Inconsolata-Regular.ttf 104 | docs/_build_html/_static/fonts/Lato-Bold.ttf 105 | docs/_build_html/_static/fonts/Lato-Regular.ttf 106 | docs/_build_html/_static/fonts/RobotoSlab-Bold.ttf 107 | docs/_build_html/_static/fonts/RobotoSlab-Regular.ttf 108 | docs/_build_html/_static/fonts/fontawesome-webfont.eot 109 | docs/_build_html/_static/fonts/fontawesome-webfont.svg 110 | docs/_build_html/_static/fonts/fontawesome-webfont.ttf 111 | docs/_build_html/_static/fonts/fontawesome-webfont.woff 112 | docs/_build_html/_static/js/modernizr.min.js 113 | docs/_build_html/_static/js/theme.js 114 | wechat/__init__.py 115 | wechat/admin.py 116 | wechat/api.py 117 | wechat/apps.py 118 | wechat/models.py 119 | wechat/tests.py 120 | wechat/urls.py 121 | wechat/views.py 122 | wechat/templates/admin/wechat/menu/change_list.html -------------------------------------------------------------------------------- /django_wechat_api.egg-info/SOURCES.txt: -------------------------------------------------------------------------------- 1 | LICENSE 2 | MANIFEST.in 3 | README.rst 4 | setup.py 5 | django_wechat_api.egg-info/PKG-INFO 6 | django_wechat_api.egg-info/SOURCES.txt 7 | django_wechat_api.egg-info/dependency_links.txt 8 | django_wechat_api.egg-info/requires.txt 9 | django_wechat_api.egg-info/top_level.txt 10 | docs/Makefile 11 | docs/conf.py 12 | docs/index.rst 13 | docs/make.bat 14 | docs/start.rst 15 | docs/_build/.doctrees/index.doctree 16 | docs/_build/.doctrees/intro.doctree 17 | docs/_build/.doctrees/start.doctree 18 | docs/_build/doctrees/environment.pickle 19 | docs/_build/doctrees/index.doctree 20 | docs/_build/doctrees/start.doctree 21 | docs/_build/html/.buildinfo 22 | docs/_build/html/genindex.html 23 | docs/_build/html/index.html 24 | docs/_build/html/objects.inv 25 | docs/_build/html/search.html 26 | docs/_build/html/searchindex.js 27 | docs/_build/html/start.html 28 | docs/_build/html/_sources/index.txt 29 | docs/_build/html/_sources/start.txt 30 | docs/_build/html/_static/ajax-loader.gif 31 | docs/_build/html/_static/alabaster.css 32 | docs/_build/html/_static/basic.css 33 | docs/_build/html/_static/comment-bright.png 34 | docs/_build/html/_static/comment-close.png 35 | docs/_build/html/_static/comment.png 36 | docs/_build/html/_static/doctools.js 37 | docs/_build/html/_static/down-pressed.png 38 | docs/_build/html/_static/down.png 39 | docs/_build/html/_static/file.png 40 | docs/_build/html/_static/jquery-1.11.1.js 41 | docs/_build/html/_static/jquery.js 42 | docs/_build/html/_static/minus.png 43 | docs/_build/html/_static/plus.png 44 | docs/_build/html/_static/pygments.css 45 | docs/_build/html/_static/searchtools.js 46 | docs/_build/html/_static/underscore-1.3.1.js 47 | docs/_build/html/_static/underscore.js 48 | docs/_build/html/_static/up-pressed.png 49 | docs/_build/html/_static/up.png 50 | docs/_build/html/_static/websupport.js 51 | docs/_build/html/_static/css/badge_only.css 52 | docs/_build/html/_static/css/theme.css 53 | docs/_build/html/_static/fonts/Inconsolata-Bold.ttf 54 | docs/_build/html/_static/fonts/Inconsolata-Regular.ttf 55 | docs/_build/html/_static/fonts/Lato-Bold.ttf 56 | docs/_build/html/_static/fonts/Lato-Regular.ttf 57 | docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf 58 | docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf 59 | docs/_build/html/_static/fonts/fontawesome-webfont.eot 60 | docs/_build/html/_static/fonts/fontawesome-webfont.svg 61 | docs/_build/html/_static/fonts/fontawesome-webfont.ttf 62 | docs/_build/html/_static/fonts/fontawesome-webfont.woff 63 | docs/_build/html/_static/js/modernizr.min.js 64 | docs/_build/html/_static/js/theme.js 65 | docs/_build_html/.buildinfo 66 | docs/_build_html/genindex.html 67 | docs/_build_html/index.html 68 | docs/_build_html/intro.html 69 | docs/_build_html/objects.inv 70 | docs/_build_html/search.html 71 | docs/_build_html/searchindex.js 72 | docs/_build_html/start.html 73 | docs/_build_html/.doctrees/environment.pickle 74 | docs/_build_html/.doctrees/index.doctree 75 | docs/_build_html/.doctrees/intro.doctree 76 | docs/_build_html/.doctrees/start.doctree 77 | docs/_build_html/_sources/index.txt 78 | docs/_build_html/_sources/intro.txt 79 | docs/_build_html/_sources/start.txt 80 | docs/_build_html/_static/ajax-loader.gif 81 | docs/_build_html/_static/basic.css 82 | docs/_build_html/_static/comment-bright.png 83 | docs/_build_html/_static/comment-close.png 84 | docs/_build_html/_static/comment.png 85 | docs/_build_html/_static/doctools.js 86 | docs/_build_html/_static/down-pressed.png 87 | docs/_build_html/_static/down.png 88 | docs/_build_html/_static/file.png 89 | docs/_build_html/_static/jquery-1.11.1.js 90 | docs/_build_html/_static/jquery.js 91 | docs/_build_html/_static/minus.png 92 | docs/_build_html/_static/plus.png 93 | docs/_build_html/_static/pygments.css 94 | docs/_build_html/_static/searchtools.js 95 | docs/_build_html/_static/underscore-1.3.1.js 96 | docs/_build_html/_static/underscore.js 97 | docs/_build_html/_static/up-pressed.png 98 | docs/_build_html/_static/up.png 99 | docs/_build_html/_static/websupport.js 100 | docs/_build_html/_static/css/badge_only.css 101 | docs/_build_html/_static/css/theme.css 102 | docs/_build_html/_static/fonts/Inconsolata-Bold.ttf 103 | docs/_build_html/_static/fonts/Inconsolata-Regular.ttf 104 | docs/_build_html/_static/fonts/Lato-Bold.ttf 105 | docs/_build_html/_static/fonts/Lato-Regular.ttf 106 | docs/_build_html/_static/fonts/RobotoSlab-Bold.ttf 107 | docs/_build_html/_static/fonts/RobotoSlab-Regular.ttf 108 | docs/_build_html/_static/fonts/fontawesome-webfont.eot 109 | docs/_build_html/_static/fonts/fontawesome-webfont.svg 110 | docs/_build_html/_static/fonts/fontawesome-webfont.ttf 111 | docs/_build_html/_static/fonts/fontawesome-webfont.woff 112 | docs/_build_html/_static/js/modernizr.min.js 113 | docs/_build_html/_static/js/theme.js 114 | wechat/__init__.py 115 | wechat/admin.py 116 | wechat/api.py 117 | wechat/apps.py 118 | wechat/models.py 119 | wechat/tests.py 120 | wechat/urls.py 121 | wechat/views.py 122 | wechat/templates/admin/wechat/menu/change_list.html -------------------------------------------------------------------------------- /django_wechat_base.egg-info/SOURCES.txt: -------------------------------------------------------------------------------- 1 | LICENSE 2 | MANIFEST.in 3 | README.rst 4 | setup.py 5 | django_wechat_base.egg-info/PKG-INFO 6 | django_wechat_base.egg-info/SOURCES.txt 7 | django_wechat_base.egg-info/dependency_links.txt 8 | django_wechat_base.egg-info/requires.txt 9 | django_wechat_base.egg-info/top_level.txt 10 | docs/Makefile 11 | docs/conf.py 12 | docs/index.rst 13 | docs/make.bat 14 | docs/start.rst 15 | docs/_build/.doctrees/index.doctree 16 | docs/_build/.doctrees/intro.doctree 17 | docs/_build/.doctrees/start.doctree 18 | docs/_build/doctrees/environment.pickle 19 | docs/_build/doctrees/index.doctree 20 | docs/_build/doctrees/start.doctree 21 | docs/_build/html/.buildinfo 22 | docs/_build/html/genindex.html 23 | docs/_build/html/index.html 24 | docs/_build/html/objects.inv 25 | docs/_build/html/search.html 26 | docs/_build/html/searchindex.js 27 | docs/_build/html/start.html 28 | docs/_build/html/_sources/index.txt 29 | docs/_build/html/_sources/start.txt 30 | docs/_build/html/_static/ajax-loader.gif 31 | docs/_build/html/_static/alabaster.css 32 | docs/_build/html/_static/basic.css 33 | docs/_build/html/_static/comment-bright.png 34 | docs/_build/html/_static/comment-close.png 35 | docs/_build/html/_static/comment.png 36 | docs/_build/html/_static/doctools.js 37 | docs/_build/html/_static/down-pressed.png 38 | docs/_build/html/_static/down.png 39 | docs/_build/html/_static/file.png 40 | docs/_build/html/_static/jquery-1.11.1.js 41 | docs/_build/html/_static/jquery.js 42 | docs/_build/html/_static/minus.png 43 | docs/_build/html/_static/plus.png 44 | docs/_build/html/_static/pygments.css 45 | docs/_build/html/_static/searchtools.js 46 | docs/_build/html/_static/underscore-1.3.1.js 47 | docs/_build/html/_static/underscore.js 48 | docs/_build/html/_static/up-pressed.png 49 | docs/_build/html/_static/up.png 50 | docs/_build/html/_static/websupport.js 51 | docs/_build/html/_static/css/badge_only.css 52 | docs/_build/html/_static/css/theme.css 53 | docs/_build/html/_static/fonts/Inconsolata-Bold.ttf 54 | docs/_build/html/_static/fonts/Inconsolata-Regular.ttf 55 | docs/_build/html/_static/fonts/Lato-Bold.ttf 56 | docs/_build/html/_static/fonts/Lato-Regular.ttf 57 | docs/_build/html/_static/fonts/RobotoSlab-Bold.ttf 58 | docs/_build/html/_static/fonts/RobotoSlab-Regular.ttf 59 | docs/_build/html/_static/fonts/fontawesome-webfont.eot 60 | docs/_build/html/_static/fonts/fontawesome-webfont.svg 61 | docs/_build/html/_static/fonts/fontawesome-webfont.ttf 62 | docs/_build/html/_static/fonts/fontawesome-webfont.woff 63 | docs/_build/html/_static/js/modernizr.min.js 64 | docs/_build/html/_static/js/theme.js 65 | docs/_build_html/.buildinfo 66 | docs/_build_html/genindex.html 67 | docs/_build_html/index.html 68 | docs/_build_html/intro.html 69 | docs/_build_html/objects.inv 70 | docs/_build_html/search.html 71 | docs/_build_html/searchindex.js 72 | docs/_build_html/start.html 73 | docs/_build_html/.doctrees/environment.pickle 74 | docs/_build_html/.doctrees/index.doctree 75 | docs/_build_html/.doctrees/intro.doctree 76 | docs/_build_html/.doctrees/start.doctree 77 | docs/_build_html/_sources/index.txt 78 | docs/_build_html/_sources/intro.txt 79 | docs/_build_html/_sources/start.txt 80 | docs/_build_html/_static/ajax-loader.gif 81 | docs/_build_html/_static/basic.css 82 | docs/_build_html/_static/comment-bright.png 83 | docs/_build_html/_static/comment-close.png 84 | docs/_build_html/_static/comment.png 85 | docs/_build_html/_static/doctools.js 86 | docs/_build_html/_static/down-pressed.png 87 | docs/_build_html/_static/down.png 88 | docs/_build_html/_static/file.png 89 | docs/_build_html/_static/jquery-1.11.1.js 90 | docs/_build_html/_static/jquery.js 91 | docs/_build_html/_static/minus.png 92 | docs/_build_html/_static/plus.png 93 | docs/_build_html/_static/pygments.css 94 | docs/_build_html/_static/searchtools.js 95 | docs/_build_html/_static/underscore-1.3.1.js 96 | docs/_build_html/_static/underscore.js 97 | docs/_build_html/_static/up-pressed.png 98 | docs/_build_html/_static/up.png 99 | docs/_build_html/_static/websupport.js 100 | docs/_build_html/_static/css/badge_only.css 101 | docs/_build_html/_static/css/theme.css 102 | docs/_build_html/_static/fonts/Inconsolata-Bold.ttf 103 | docs/_build_html/_static/fonts/Inconsolata-Regular.ttf 104 | docs/_build_html/_static/fonts/Lato-Bold.ttf 105 | docs/_build_html/_static/fonts/Lato-Regular.ttf 106 | docs/_build_html/_static/fonts/RobotoSlab-Bold.ttf 107 | docs/_build_html/_static/fonts/RobotoSlab-Regular.ttf 108 | docs/_build_html/_static/fonts/fontawesome-webfont.eot 109 | docs/_build_html/_static/fonts/fontawesome-webfont.svg 110 | docs/_build_html/_static/fonts/fontawesome-webfont.ttf 111 | docs/_build_html/_static/fonts/fontawesome-webfont.woff 112 | docs/_build_html/_static/js/modernizr.min.js 113 | docs/_build_html/_static/js/theme.js 114 | wechat/__init__.py 115 | wechat/admin.py 116 | wechat/api.py 117 | wechat/apps.py 118 | wechat/models.py 119 | wechat/tests.py 120 | wechat/urls.py 121 | wechat/views.py 122 | wechat/locale/zh_Hans/LC_MESSAGES/django.mo 123 | wechat/locale/zh_Hans/LC_MESSAGES/django.po 124 | wechat/templates/admin/wechat/menu/change_list.html -------------------------------------------------------------------------------- /docs/_build/html/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Search — django_wechat 3.0 documentation 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
    43 | 44 | 45 | 89 | 90 |
    91 | 92 | 93 | 97 | 98 | 99 | 100 |
    101 |
    102 | 103 | 104 | 105 | 106 | 107 | 108 |
    109 |
      110 |
    • Docs »
    • 111 | 112 |
    • 113 |
    • 114 | 115 |
    • 116 |
    117 |
    118 |
    119 |
    120 |
    121 | 122 | 130 | 131 | 132 |
    133 | 134 |
    135 | 136 |
    137 |
    138 |
    139 | 140 | 141 |
    142 | 143 |
    144 |

    145 | © Copyright 2016, chanmo. 146 | 147 |

    148 |
    149 | Built with Sphinx using a theme provided by Read the Docs. 150 | 151 |
    152 | 153 |
    154 |
    155 | 156 |
    157 | 158 |
    159 | 160 | 161 | 162 | 163 | 164 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 192 | 193 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | -------------------------------------------------------------------------------- /docs/_build_html/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Search — django_wechat 3.0 documentation 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
    43 | 44 | 45 | 89 | 90 |
    91 | 92 | 93 | 97 | 98 | 99 | 100 |
    101 |
    102 | 103 | 104 | 105 | 106 | 107 | 108 |
    109 |
      110 |
    • Docs »
    • 111 | 112 |
    • 113 |
    • 114 | 115 |
    • 116 |
    117 |
    118 |
    119 |
    120 |
    121 | 122 | 130 | 131 | 132 |
    133 | 134 |
    135 | 136 |
    137 |
    138 |
    139 | 140 | 141 |
    142 | 143 |
    144 |

    145 | © Copyright 2016, chanmo. 146 | 147 |

    148 |
    149 | Built with Sphinx using a theme provided by Read the Docs. 150 | 151 |
    152 | 153 |
    154 |
    155 | 156 |
    157 | 158 |
    159 | 160 | 161 | 162 | 163 | 164 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 192 | 193 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | -------------------------------------------------------------------------------- /docs/_build/html/start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 基于django的微信基础模块 — django_wechat 3.0 documentation 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
    43 | 44 | 45 | 96 | 97 |
    98 | 99 | 100 | 104 | 105 | 106 | 107 |
    108 |
    109 | 110 | 111 | 112 | 113 | 114 | 115 |
    116 |
      117 |
    • Docs »
    • 118 | 119 |
    • 基于django的微信基础模块
    • 120 |
    • 121 | 122 | 123 | View page source 124 | 125 | 126 |
    • 127 |
    128 |
    129 |
    130 |
    131 |
    132 | 133 |
    134 |

    基于django的微信基础模块

    135 |

    一个基于django的微信基础功能模块

    136 |
    137 |

    快速开始:

    138 |

    安装依赖模块:

    139 |

    安装wechat:

    140 |

    把wechat模块添加到你的settings.py里面:

    141 |

    在settings.py里面添加微信设置信息:

    142 |

    在urls.py里面添加微信接口:

    143 |

    添加数据表:

    144 |

    使用微信开发者模块:

    145 |
    146 |
    接口地址为:http://yourdomain/wx/ 147 | token为: yourtoken
    148 |
    149 |
    150 |

    版本更改:

    151 |
      152 |
    • v0.3 使js配置信息可编辑,添加Qrcode类
    • 153 |
    • v0.2 添加WxMemberView
    • 154 |
    • v0.1 第一版
    • 155 |
    156 |
    157 |
    158 | 159 | 160 |
    161 |
    162 |
    163 | 164 | 165 |
    166 | 167 |
    168 |

    169 | © Copyright 2016, chanmo. 170 | 171 |

    172 |
    173 | Built with Sphinx using a theme provided by Read the Docs. 174 | 175 |
    176 | 177 |
    178 |
    179 | 180 |
    181 | 182 |
    183 | 184 | 185 | 186 | 187 | 188 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 215 | 216 | 217 | 218 | -------------------------------------------------------------------------------- /docs/_build_html/start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 基于django的微信基础模块 — django_wechat 3.0 documentation 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
    43 | 44 | 45 | 96 | 97 |
    98 | 99 | 100 | 104 | 105 | 106 | 107 |
    108 |
    109 | 110 | 111 | 112 | 113 | 114 | 115 |
    116 |
      117 |
    • Docs »
    • 118 | 119 |
    • 基于django的微信基础模块
    • 120 |
    • 121 | 122 | 123 | View page source 124 | 125 | 126 |
    • 127 |
    128 |
    129 |
    130 |
    131 |
    132 | 133 |
    134 |

    基于django的微信基础模块

    135 |

    一个基于django的微信基础功能模块

    136 |
    137 |

    快速开始:

    138 |

    安装依赖模块:

    139 |

    安装wechat:

    140 |

    把wechat模块添加到你的settings.py里面:

    141 |

    在settings.py里面添加微信设置信息:

    142 |

    在urls.py里面添加微信接口:

    143 |

    添加数据表:

    144 |

    使用微信开发者模块:

    145 |
    146 |
    接口地址为:http://yourdomain/wx/ 147 | token为: yourtoken
    148 |
    149 |
    150 |

    版本更改:

    151 |
      152 |
    • v0.3 使js配置信息可编辑,添加Qrcode类
    • 153 |
    • v0.2 添加WxMemberView
    • 154 |
    • v0.1 第一版
    • 155 |
    156 |
    157 |
    158 | 159 | 160 |
    161 |
    162 |
    163 | 164 | 165 |
    166 | 167 |
    168 |

    169 | © Copyright 2016, chanmo. 170 | 171 |

    172 |
    173 | Built with Sphinx using a theme provided by Read the Docs. 174 | 175 |
    176 | 177 |
    178 |
    179 | 180 |
    181 | 182 |
    183 | 184 | 185 | 186 | 187 | 188 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 215 | 216 | 217 | 218 | -------------------------------------------------------------------------------- /docs/_build/html/_static/js/theme.js: -------------------------------------------------------------------------------- 1 | require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o"); 77 | 78 | // Add expand links to all parents of nested ul 79 | $('.wy-menu-vertical ul').not('.simple').siblings('a').each(function () { 80 | var link = $(this); 81 | expand = $(''); 82 | expand.on('click', function (ev) { 83 | self.toggleCurrent(link); 84 | ev.stopPropagation(); 85 | return false; 86 | }); 87 | link.prepend(expand); 88 | }); 89 | }; 90 | 91 | nav.reset = function () { 92 | // Get anchor from URL and open up nested nav 93 | var anchor = encodeURI(window.location.hash); 94 | if (anchor) { 95 | try { 96 | var link = $('.wy-menu-vertical') 97 | .find('[href="' + anchor + '"]'); 98 | $('.wy-menu-vertical li.toctree-l1 li.current') 99 | .removeClass('current'); 100 | link.closest('li.toctree-l2').addClass('current'); 101 | link.closest('li.toctree-l3').addClass('current'); 102 | link.closest('li.toctree-l4').addClass('current'); 103 | } 104 | catch (err) { 105 | console.log("Error expanding nav for anchor", err); 106 | } 107 | } 108 | }; 109 | 110 | nav.onScroll = function () { 111 | this.winScroll = false; 112 | var newWinPosition = this.win.scrollTop(), 113 | winBottom = newWinPosition + this.winHeight, 114 | navPosition = this.navBar.scrollTop(), 115 | newNavPosition = navPosition + (newWinPosition - this.winPosition); 116 | if (newWinPosition < 0 || winBottom > this.docHeight) { 117 | return; 118 | } 119 | this.navBar.scrollTop(newNavPosition); 120 | this.winPosition = newWinPosition; 121 | }; 122 | 123 | nav.onResize = function () { 124 | this.winResize = false; 125 | this.winHeight = this.win.height(); 126 | this.docHeight = $(document).height(); 127 | }; 128 | 129 | nav.hashChange = function () { 130 | this.linkScroll = true; 131 | this.win.one('hashchange', function () { 132 | this.linkScroll = false; 133 | }); 134 | }; 135 | 136 | nav.toggleCurrent = function (elem) { 137 | var parent_li = elem.closest('li'); 138 | parent_li.siblings('li.current').removeClass('current'); 139 | parent_li.siblings().find('li.current').removeClass('current'); 140 | parent_li.find('> ul li.current').removeClass('current'); 141 | parent_li.toggleClass('current'); 142 | } 143 | 144 | return nav; 145 | }; 146 | 147 | module.exports.ThemeNav = ThemeNav(); 148 | 149 | if (typeof(window) != 'undefined') { 150 | window.SphinxRtdTheme = { StickyNav: module.exports.ThemeNav }; 151 | } 152 | 153 | },{"jquery":"jquery"}]},{},["sphinx-rtd-theme"]); 154 | -------------------------------------------------------------------------------- /docs/_build_html/_static/js/theme.js: -------------------------------------------------------------------------------- 1 | require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o"); 77 | 78 | // Add expand links to all parents of nested ul 79 | $('.wy-menu-vertical ul').not('.simple').siblings('a').each(function () { 80 | var link = $(this); 81 | expand = $(''); 82 | expand.on('click', function (ev) { 83 | self.toggleCurrent(link); 84 | ev.stopPropagation(); 85 | return false; 86 | }); 87 | link.prepend(expand); 88 | }); 89 | }; 90 | 91 | nav.reset = function () { 92 | // Get anchor from URL and open up nested nav 93 | var anchor = encodeURI(window.location.hash); 94 | if (anchor) { 95 | try { 96 | var link = $('.wy-menu-vertical') 97 | .find('[href="' + anchor + '"]'); 98 | $('.wy-menu-vertical li.toctree-l1 li.current') 99 | .removeClass('current'); 100 | link.closest('li.toctree-l2').addClass('current'); 101 | link.closest('li.toctree-l3').addClass('current'); 102 | link.closest('li.toctree-l4').addClass('current'); 103 | } 104 | catch (err) { 105 | console.log("Error expanding nav for anchor", err); 106 | } 107 | } 108 | }; 109 | 110 | nav.onScroll = function () { 111 | this.winScroll = false; 112 | var newWinPosition = this.win.scrollTop(), 113 | winBottom = newWinPosition + this.winHeight, 114 | navPosition = this.navBar.scrollTop(), 115 | newNavPosition = navPosition + (newWinPosition - this.winPosition); 116 | if (newWinPosition < 0 || winBottom > this.docHeight) { 117 | return; 118 | } 119 | this.navBar.scrollTop(newNavPosition); 120 | this.winPosition = newWinPosition; 121 | }; 122 | 123 | nav.onResize = function () { 124 | this.winResize = false; 125 | this.winHeight = this.win.height(); 126 | this.docHeight = $(document).height(); 127 | }; 128 | 129 | nav.hashChange = function () { 130 | this.linkScroll = true; 131 | this.win.one('hashchange', function () { 132 | this.linkScroll = false; 133 | }); 134 | }; 135 | 136 | nav.toggleCurrent = function (elem) { 137 | var parent_li = elem.closest('li'); 138 | parent_li.siblings('li.current').removeClass('current'); 139 | parent_li.siblings().find('li.current').removeClass('current'); 140 | parent_li.find('> ul li.current').removeClass('current'); 141 | parent_li.toggleClass('current'); 142 | } 143 | 144 | return nav; 145 | }; 146 | 147 | module.exports.ThemeNav = ThemeNav(); 148 | 149 | if (typeof(window) != 'undefined') { 150 | window.SphinxRtdTheme = { StickyNav: module.exports.ThemeNav }; 151 | } 152 | 153 | },{"jquery":"jquery"}]},{},["sphinx-rtd-theme"]); 154 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | REM Command file for Sphinx documentation 4 | 5 | if "%SPHINXBUILD%" == "" ( 6 | set SPHINXBUILD=sphinx-build 7 | ) 8 | set BUILDDIR=_build 9 | set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . 10 | set I18NSPHINXOPTS=%SPHINXOPTS% . 11 | if NOT "%PAPER%" == "" ( 12 | set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% 13 | set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% 14 | ) 15 | 16 | if "%1" == "" goto help 17 | 18 | if "%1" == "help" ( 19 | :help 20 | echo.Please use `make ^` where ^ is one of 21 | echo. html to make standalone HTML files 22 | echo. dirhtml to make HTML files named index.html in directories 23 | echo. singlehtml to make a single large HTML file 24 | echo. pickle to make pickle files 25 | echo. json to make JSON files 26 | echo. htmlhelp to make HTML files and a HTML help project 27 | echo. qthelp to make HTML files and a qthelp project 28 | echo. devhelp to make HTML files and a Devhelp project 29 | echo. epub to make an epub 30 | echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter 31 | echo. text to make text files 32 | echo. man to make manual pages 33 | echo. texinfo to make Texinfo files 34 | echo. gettext to make PO message catalogs 35 | echo. changes to make an overview over all changed/added/deprecated items 36 | echo. xml to make Docutils-native XML files 37 | echo. pseudoxml to make pseudoxml-XML files for display purposes 38 | echo. linkcheck to check all external links for integrity 39 | echo. doctest to run all doctests embedded in the documentation if enabled 40 | echo. coverage to run coverage check of the documentation if enabled 41 | goto end 42 | ) 43 | 44 | if "%1" == "clean" ( 45 | for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i 46 | del /q /s %BUILDDIR%\* 47 | goto end 48 | ) 49 | 50 | 51 | REM Check if sphinx-build is available and fallback to Python version if any 52 | %SPHINXBUILD% 1>NUL 2>NUL 53 | if errorlevel 9009 goto sphinx_python 54 | goto sphinx_ok 55 | 56 | :sphinx_python 57 | 58 | set SPHINXBUILD=python -m sphinx.__init__ 59 | %SPHINXBUILD% 2> nul 60 | if errorlevel 9009 ( 61 | echo. 62 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 63 | echo.installed, then set the SPHINXBUILD environment variable to point 64 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 65 | echo.may add the Sphinx directory to PATH. 66 | echo. 67 | echo.If you don't have Sphinx installed, grab it from 68 | echo.http://sphinx-doc.org/ 69 | exit /b 1 70 | ) 71 | 72 | :sphinx_ok 73 | 74 | 75 | if "%1" == "html" ( 76 | %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html 77 | if errorlevel 1 exit /b 1 78 | echo. 79 | echo.Build finished. The HTML pages are in %BUILDDIR%/html. 80 | goto end 81 | ) 82 | 83 | if "%1" == "dirhtml" ( 84 | %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml 85 | if errorlevel 1 exit /b 1 86 | echo. 87 | echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. 88 | goto end 89 | ) 90 | 91 | if "%1" == "singlehtml" ( 92 | %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml 93 | if errorlevel 1 exit /b 1 94 | echo. 95 | echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. 96 | goto end 97 | ) 98 | 99 | if "%1" == "pickle" ( 100 | %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle 101 | if errorlevel 1 exit /b 1 102 | echo. 103 | echo.Build finished; now you can process the pickle files. 104 | goto end 105 | ) 106 | 107 | if "%1" == "json" ( 108 | %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json 109 | if errorlevel 1 exit /b 1 110 | echo. 111 | echo.Build finished; now you can process the JSON files. 112 | goto end 113 | ) 114 | 115 | if "%1" == "htmlhelp" ( 116 | %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp 117 | if errorlevel 1 exit /b 1 118 | echo. 119 | echo.Build finished; now you can run HTML Help Workshop with the ^ 120 | .hhp project file in %BUILDDIR%/htmlhelp. 121 | goto end 122 | ) 123 | 124 | if "%1" == "qthelp" ( 125 | %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp 126 | if errorlevel 1 exit /b 1 127 | echo. 128 | echo.Build finished; now you can run "qcollectiongenerator" with the ^ 129 | .qhcp project file in %BUILDDIR%/qthelp, like this: 130 | echo.^> qcollectiongenerator %BUILDDIR%\qthelp\django_wechat.qhcp 131 | echo.To view the help file: 132 | echo.^> assistant -collectionFile %BUILDDIR%\qthelp\django_wechat.ghc 133 | goto end 134 | ) 135 | 136 | if "%1" == "devhelp" ( 137 | %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp 138 | if errorlevel 1 exit /b 1 139 | echo. 140 | echo.Build finished. 141 | goto end 142 | ) 143 | 144 | if "%1" == "epub" ( 145 | %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub 146 | if errorlevel 1 exit /b 1 147 | echo. 148 | echo.Build finished. The epub file is in %BUILDDIR%/epub. 149 | goto end 150 | ) 151 | 152 | if "%1" == "latex" ( 153 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 154 | if errorlevel 1 exit /b 1 155 | echo. 156 | echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. 157 | goto end 158 | ) 159 | 160 | if "%1" == "latexpdf" ( 161 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 162 | cd %BUILDDIR%/latex 163 | make all-pdf 164 | cd %~dp0 165 | echo. 166 | echo.Build finished; the PDF files are in %BUILDDIR%/latex. 167 | goto end 168 | ) 169 | 170 | if "%1" == "latexpdfja" ( 171 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 172 | cd %BUILDDIR%/latex 173 | make all-pdf-ja 174 | cd %~dp0 175 | echo. 176 | echo.Build finished; the PDF files are in %BUILDDIR%/latex. 177 | goto end 178 | ) 179 | 180 | if "%1" == "text" ( 181 | %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text 182 | if errorlevel 1 exit /b 1 183 | echo. 184 | echo.Build finished. The text files are in %BUILDDIR%/text. 185 | goto end 186 | ) 187 | 188 | if "%1" == "man" ( 189 | %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man 190 | if errorlevel 1 exit /b 1 191 | echo. 192 | echo.Build finished. The manual pages are in %BUILDDIR%/man. 193 | goto end 194 | ) 195 | 196 | if "%1" == "texinfo" ( 197 | %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo 198 | if errorlevel 1 exit /b 1 199 | echo. 200 | echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. 201 | goto end 202 | ) 203 | 204 | if "%1" == "gettext" ( 205 | %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale 206 | if errorlevel 1 exit /b 1 207 | echo. 208 | echo.Build finished. The message catalogs are in %BUILDDIR%/locale. 209 | goto end 210 | ) 211 | 212 | if "%1" == "changes" ( 213 | %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes 214 | if errorlevel 1 exit /b 1 215 | echo. 216 | echo.The overview file is in %BUILDDIR%/changes. 217 | goto end 218 | ) 219 | 220 | if "%1" == "linkcheck" ( 221 | %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck 222 | if errorlevel 1 exit /b 1 223 | echo. 224 | echo.Link check complete; look for any errors in the above output ^ 225 | or in %BUILDDIR%/linkcheck/output.txt. 226 | goto end 227 | ) 228 | 229 | if "%1" == "doctest" ( 230 | %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest 231 | if errorlevel 1 exit /b 1 232 | echo. 233 | echo.Testing of doctests in the sources finished, look at the ^ 234 | results in %BUILDDIR%/doctest/output.txt. 235 | goto end 236 | ) 237 | 238 | if "%1" == "coverage" ( 239 | %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage 240 | if errorlevel 1 exit /b 1 241 | echo. 242 | echo.Testing of coverage in the sources finished, look at the ^ 243 | results in %BUILDDIR%/coverage/python.txt. 244 | goto end 245 | ) 246 | 247 | if "%1" == "xml" ( 248 | %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml 249 | if errorlevel 1 exit /b 1 250 | echo. 251 | echo.Build finished. The XML files are in %BUILDDIR%/xml. 252 | goto end 253 | ) 254 | 255 | if "%1" == "pseudoxml" ( 256 | %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml 257 | if errorlevel 1 exit /b 1 258 | echo. 259 | echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. 260 | goto end 261 | ) 262 | 263 | :end 264 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | PAPER = 8 | BUILDDIR = _build 9 | 10 | # User-friendly check for sphinx-build 11 | ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) 12 | $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) 13 | endif 14 | 15 | # Internal variables. 16 | PAPEROPT_a4 = -D latex_paper_size=a4 17 | PAPEROPT_letter = -D latex_paper_size=letter 18 | ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . 19 | # the i18n builder cannot share the environment and doctrees with the others 20 | I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . 21 | 22 | .PHONY: help 23 | help: 24 | @echo "Please use \`make ' where is one of" 25 | @echo " html to make standalone HTML files" 26 | @echo " dirhtml to make HTML files named index.html in directories" 27 | @echo " singlehtml to make a single large HTML file" 28 | @echo " pickle to make pickle files" 29 | @echo " json to make JSON files" 30 | @echo " htmlhelp to make HTML files and a HTML help project" 31 | @echo " qthelp to make HTML files and a qthelp project" 32 | @echo " applehelp to make an Apple Help Book" 33 | @echo " devhelp to make HTML files and a Devhelp project" 34 | @echo " epub to make an epub" 35 | @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" 36 | @echo " latexpdf to make LaTeX files and run them through pdflatex" 37 | @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" 38 | @echo " text to make text files" 39 | @echo " man to make manual pages" 40 | @echo " texinfo to make Texinfo files" 41 | @echo " info to make Texinfo files and run them through makeinfo" 42 | @echo " gettext to make PO message catalogs" 43 | @echo " changes to make an overview of all changed/added/deprecated items" 44 | @echo " xml to make Docutils-native XML files" 45 | @echo " pseudoxml to make pseudoxml-XML files for display purposes" 46 | @echo " linkcheck to check all external links for integrity" 47 | @echo " doctest to run all doctests embedded in the documentation (if enabled)" 48 | @echo " coverage to run coverage check of the documentation (if enabled)" 49 | 50 | .PHONY: clean 51 | clean: 52 | rm -rf $(BUILDDIR)/* 53 | 54 | .PHONY: html 55 | html: 56 | $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html 57 | @echo 58 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." 59 | 60 | .PHONY: dirhtml 61 | dirhtml: 62 | $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml 63 | @echo 64 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." 65 | 66 | .PHONY: singlehtml 67 | singlehtml: 68 | $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml 69 | @echo 70 | @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." 71 | 72 | .PHONY: pickle 73 | pickle: 74 | $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle 75 | @echo 76 | @echo "Build finished; now you can process the pickle files." 77 | 78 | .PHONY: json 79 | json: 80 | $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json 81 | @echo 82 | @echo "Build finished; now you can process the JSON files." 83 | 84 | .PHONY: htmlhelp 85 | htmlhelp: 86 | $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp 87 | @echo 88 | @echo "Build finished; now you can run HTML Help Workshop with the" \ 89 | ".hhp project file in $(BUILDDIR)/htmlhelp." 90 | 91 | .PHONY: qthelp 92 | qthelp: 93 | $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp 94 | @echo 95 | @echo "Build finished; now you can run "qcollectiongenerator" with the" \ 96 | ".qhcp project file in $(BUILDDIR)/qthelp, like this:" 97 | @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/django_wechat.qhcp" 98 | @echo "To view the help file:" 99 | @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/django_wechat.qhc" 100 | 101 | .PHONY: applehelp 102 | applehelp: 103 | $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp 104 | @echo 105 | @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." 106 | @echo "N.B. You won't be able to view it unless you put it in" \ 107 | "~/Library/Documentation/Help or install it in your application" \ 108 | "bundle." 109 | 110 | .PHONY: devhelp 111 | devhelp: 112 | $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp 113 | @echo 114 | @echo "Build finished." 115 | @echo "To view the help file:" 116 | @echo "# mkdir -p $$HOME/.local/share/devhelp/django_wechat" 117 | @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/django_wechat" 118 | @echo "# devhelp" 119 | 120 | .PHONY: epub 121 | epub: 122 | $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub 123 | @echo 124 | @echo "Build finished. The epub file is in $(BUILDDIR)/epub." 125 | 126 | .PHONY: latex 127 | latex: 128 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 129 | @echo 130 | @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." 131 | @echo "Run \`make' in that directory to run these through (pdf)latex" \ 132 | "(use \`make latexpdf' here to do that automatically)." 133 | 134 | .PHONY: latexpdf 135 | latexpdf: 136 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 137 | @echo "Running LaTeX files through pdflatex..." 138 | $(MAKE) -C $(BUILDDIR)/latex all-pdf 139 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 140 | 141 | .PHONY: latexpdfja 142 | latexpdfja: 143 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 144 | @echo "Running LaTeX files through platex and dvipdfmx..." 145 | $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja 146 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 147 | 148 | .PHONY: text 149 | text: 150 | $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text 151 | @echo 152 | @echo "Build finished. The text files are in $(BUILDDIR)/text." 153 | 154 | .PHONY: man 155 | man: 156 | $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man 157 | @echo 158 | @echo "Build finished. The manual pages are in $(BUILDDIR)/man." 159 | 160 | .PHONY: texinfo 161 | texinfo: 162 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 163 | @echo 164 | @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." 165 | @echo "Run \`make' in that directory to run these through makeinfo" \ 166 | "(use \`make info' here to do that automatically)." 167 | 168 | .PHONY: info 169 | info: 170 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 171 | @echo "Running Texinfo files through makeinfo..." 172 | make -C $(BUILDDIR)/texinfo info 173 | @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." 174 | 175 | .PHONY: gettext 176 | gettext: 177 | $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale 178 | @echo 179 | @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." 180 | 181 | .PHONY: changes 182 | changes: 183 | $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes 184 | @echo 185 | @echo "The overview file is in $(BUILDDIR)/changes." 186 | 187 | .PHONY: linkcheck 188 | linkcheck: 189 | $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck 190 | @echo 191 | @echo "Link check complete; look for any errors in the above output " \ 192 | "or in $(BUILDDIR)/linkcheck/output.txt." 193 | 194 | .PHONY: doctest 195 | doctest: 196 | $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest 197 | @echo "Testing of doctests in the sources finished, look at the " \ 198 | "results in $(BUILDDIR)/doctest/output.txt." 199 | 200 | .PHONY: coverage 201 | coverage: 202 | $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage 203 | @echo "Testing of coverage in the sources finished, look at the " \ 204 | "results in $(BUILDDIR)/coverage/python.txt." 205 | 206 | .PHONY: xml 207 | xml: 208 | $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml 209 | @echo 210 | @echo "Build finished. The XML files are in $(BUILDDIR)/xml." 211 | 212 | .PHONY: pseudoxml 213 | pseudoxml: 214 | $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml 215 | @echo 216 | @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." 217 | -------------------------------------------------------------------------------- /docs/_build/html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | django_wechat — django_wechat 3.0 documentation 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
    43 | 44 | 45 | 99 | 100 |
    101 | 102 | 103 | 107 | 108 | 109 | 110 |
    111 |
    112 | 113 | 114 | 115 | 116 | 117 | 118 |
    119 |
      120 |
    • Docs »
    • 121 | 122 |
    • django_wechat
    • 123 |
    • 124 | 125 | 126 | View page source 127 | 128 | 129 |
    • 130 |
    131 |
    132 |
    133 |
    134 |
    135 | 136 |
    137 |

    django_wechat

    138 |

    django_wechat 是一个基于django的微信基础模块,提供了微信的最基础接口功能.

    139 |
    140 |

    功能

    141 |
      142 |
    • 关注回复(关键字为”关注”)
    • 143 |
    • 默认回复(关键字为”默认”)
    • 144 |
    • 文本回复
    • 145 |
    • 单图文回复
    • 146 |
    • 自定义菜单
    • 147 |
    148 |
    149 |
    150 |

    使用方法

    151 |

    安装依赖模块:

    152 |
    pip install xmltodict
    153 | 
    154 |
    155 |

    安装wechat:

    156 |
    pip install git+https://github.com/ChanMo/django_wechat.git
    157 | 
    158 |
    159 |

    把wechat模块添加到你的settings.py里面:

    160 |
     INSTALLED_APPS = (
    161 |      ...
    162 |      'wechat',
    163 |      ...
    164 | )
    165 | 
    166 |
    167 |

    在settings.py里面添加微信设置信息:

    168 |
    # wechat config
    169 | WECHAT_APPID = 'test'
    170 | WECHAT_APPSECRET = 'test'
    171 | WECHAT_TOKEN = 'yourtoken'
    172 | WECHAT_MCH_ID = 'test'
    173 | WECHAT_KEY = 'test'
    174 | WECHAT_JS_DEBUG = 'test'
    175 | WECHAT_JS_APILIST = ['test']
    176 | 
    177 |
    178 |

    在urls.py里面添加微信接口:

    179 |
    url(r'^wx/', include('wechat.urls')),
    180 | 
    181 |
    182 |

    添加数据表:

    183 |
    python manage.py migrate
    184 | 
    185 |
    186 |

    使用微信开发者模块:

    187 |
    接口地址为:http://yourdomain/wx/
    188 | token为: yourtoken
    189 | 
    190 |
    191 |
    192 |
    193 |

    api模块

    194 |
      195 |
    • Base
    • 196 |
    • Menu
    • 197 |
    • Push
    • 198 |
    • Reponse
    • 199 |
    • Member
    • 200 |
    • Pay
    • 201 |
    • Js
    • 202 |
    • Qrcode
    • 203 |
    204 |
    205 |
    206 |

    开发者

    207 | 210 |
    211 |
    212 |

    版本更改

    213 |
      214 |
    • v0.3 使js配置信息可编辑,添加Qrcode类
    • 215 |
    • v0.2 添加WxMemberView
    • 216 |
    • v0.1 第一版
    • 217 |
    218 |
    219 |
    220 | 221 | 222 |
    223 |
    224 |
    225 | 226 | 227 |
    228 | 229 |
    230 |

    231 | © Copyright 2016, chanmo. 232 | 233 |

    234 |
    235 | Built with Sphinx using a theme provided by Read the Docs. 236 | 237 |
    238 | 239 |
    240 |
    241 | 242 |
    243 | 244 |
    245 | 246 | 247 | 248 | 249 | 250 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 277 | 278 | 279 | 280 | -------------------------------------------------------------------------------- /docs/_build_html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | django_wechat — django_wechat 3.0 documentation 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
    43 | 44 | 45 | 99 | 100 |
    101 | 102 | 103 | 107 | 108 | 109 | 110 |
    111 |
    112 | 113 | 114 | 115 | 116 | 117 | 118 |
    119 |
      120 |
    • Docs »
    • 121 | 122 |
    • django_wechat
    • 123 |
    • 124 | 125 | 126 | View page source 127 | 128 | 129 |
    • 130 |
    131 |
    132 |
    133 |
    134 |
    135 | 136 |
    137 |

    django_wechat

    138 |

    django_wechat 是一个基于django的微信基础模块,提供了微信的最基础接口功能.

    139 |
    140 |

    功能:

    141 |
      142 |
    • 关注回复(关键字为”关注”)
    • 143 |
    • 默认回复(关键字为”默认”)
    • 144 |
    • 文本回复
    • 145 |
    • 单图文回复
    • 146 |
    • 自定义菜单
    • 147 |
    148 |
    149 |
    150 |

    使用方法:

    151 |

    安装依赖模块:

    152 |
    pip install xmltodict
    153 | 
    154 |
    155 |

    安装wechat:

    156 |
    pip install git+https://github.com/ChanMo/django_wechat.git
    157 | 
    158 |
    159 |

    把wechat模块添加到你的settings.py里面:

    160 |
     INSTALLED_APPS = (
    161 |      ...
    162 |      'wechat',
    163 |      ...
    164 | )
    165 | 
    166 |
    167 |

    在settings.py里面添加微信设置信息:

    168 |
    # wechat config
    169 | WECHAT_APPID = 'test'
    170 | WECHAT_APPSECRET = 'test'
    171 | WECHAT_TOKEN = 'yourtoken'
    172 | WECHAT_MCH_ID = 'test'
    173 | WECHAT_KEY = 'test'
    174 | WECHAT_JS_DEBUG = 'test'
    175 | WECHAT_JS_APILIST = ['test']
    176 | 
    177 |
    178 |

    在urls.py里面添加微信接口:

    179 |
    url(r'^wx/', include('wechat.urls')),
    180 | 
    181 |
    182 |

    添加数据表:

    183 |
    python manage.py migrate
    184 | 
    185 |
    186 |

    使用微信开发者模块:

    187 |
    接口地址为:http://yourdomain/wx/
    188 | token为: yourtoken
    189 | 
    190 |
    191 |
    192 |
    193 |

    api模块:

    194 |
      195 |
    • Base
    • 196 |
    • Menu
    • 197 |
    • Push
    • 198 |
    • Reponse
    • 199 |
    • Member
    • 200 |
    • Pay
    • 201 |
    • Js
    • 202 |
    • Qrcode
    • 203 |
    204 |
    205 |
    206 |

    开发者:

    207 | 210 |
    211 |
    212 |

    版本更改:

    213 |
      214 |
    • v0.3 使js配置信息可编辑,添加Qrcode类
    • 215 |
    • v0.2 添加WxMemberView
    • 216 |
    • v0.1 第一版
    • 217 |
    218 |
    219 |
    220 | 221 | 222 |
    223 |
    224 |
    225 | 226 | 227 |
    228 | 229 |
    230 |

    231 | © Copyright 2016, chanmo. 232 | 233 |

    234 |
    235 | Built with Sphinx using a theme provided by Read the Docs. 236 | 237 |
    238 | 239 |
    240 |
    241 | 242 |
    243 | 244 |
    245 | 246 | 247 | 248 | 249 | 250 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 277 | 278 | 279 | 280 | -------------------------------------------------------------------------------- /docs/_build/html/_static/doctools.js: -------------------------------------------------------------------------------- 1 | /* 2 | * doctools.js 3 | * ~~~~~~~~~~~ 4 | * 5 | * Sphinx JavaScript utilities for all documentation. 6 | * 7 | * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. 8 | * :license: BSD, see LICENSE for details. 9 | * 10 | */ 11 | 12 | /** 13 | * select a different prefix for underscore 14 | */ 15 | $u = _.noConflict(); 16 | 17 | /** 18 | * make the code below compatible with browsers without 19 | * an installed firebug like debugger 20 | if (!window.console || !console.firebug) { 21 | var names = ["log", "debug", "info", "warn", "error", "assert", "dir", 22 | "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", 23 | "profile", "profileEnd"]; 24 | window.console = {}; 25 | for (var i = 0; i < names.length; ++i) 26 | window.console[names[i]] = function() {}; 27 | } 28 | */ 29 | 30 | /** 31 | * small helper function to urldecode strings 32 | */ 33 | jQuery.urldecode = function(x) { 34 | return decodeURIComponent(x).replace(/\+/g, ' '); 35 | }; 36 | 37 | /** 38 | * small helper function to urlencode strings 39 | */ 40 | jQuery.urlencode = encodeURIComponent; 41 | 42 | /** 43 | * This function returns the parsed url parameters of the 44 | * current request. Multiple values per key are supported, 45 | * it will always return arrays of strings for the value parts. 46 | */ 47 | jQuery.getQueryParameters = function(s) { 48 | if (typeof s == 'undefined') 49 | s = document.location.search; 50 | var parts = s.substr(s.indexOf('?') + 1).split('&'); 51 | var result = {}; 52 | for (var i = 0; i < parts.length; i++) { 53 | var tmp = parts[i].split('=', 2); 54 | var key = jQuery.urldecode(tmp[0]); 55 | var value = jQuery.urldecode(tmp[1]); 56 | if (key in result) 57 | result[key].push(value); 58 | else 59 | result[key] = [value]; 60 | } 61 | return result; 62 | }; 63 | 64 | /** 65 | * highlight a given string on a jquery object by wrapping it in 66 | * span elements with the given class name. 67 | */ 68 | jQuery.fn.highlightText = function(text, className) { 69 | function highlight(node) { 70 | if (node.nodeType == 3) { 71 | var val = node.nodeValue; 72 | var pos = val.toLowerCase().indexOf(text); 73 | if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { 74 | var span = document.createElement("span"); 75 | span.className = className; 76 | span.appendChild(document.createTextNode(val.substr(pos, text.length))); 77 | node.parentNode.insertBefore(span, node.parentNode.insertBefore( 78 | document.createTextNode(val.substr(pos + text.length)), 79 | node.nextSibling)); 80 | node.nodeValue = val.substr(0, pos); 81 | } 82 | } 83 | else if (!jQuery(node).is("button, select, textarea")) { 84 | jQuery.each(node.childNodes, function() { 85 | highlight(this); 86 | }); 87 | } 88 | } 89 | return this.each(function() { 90 | highlight(this); 91 | }); 92 | }; 93 | 94 | /* 95 | * backward compatibility for jQuery.browser 96 | * This will be supported until firefox bug is fixed. 97 | */ 98 | if (!jQuery.browser) { 99 | jQuery.uaMatch = function(ua) { 100 | ua = ua.toLowerCase(); 101 | 102 | var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 103 | /(webkit)[ \/]([\w.]+)/.exec(ua) || 104 | /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 105 | /(msie) ([\w.]+)/.exec(ua) || 106 | ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 107 | []; 108 | 109 | return { 110 | browser: match[ 1 ] || "", 111 | version: match[ 2 ] || "0" 112 | }; 113 | }; 114 | jQuery.browser = {}; 115 | jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; 116 | } 117 | 118 | /** 119 | * Small JavaScript module for the documentation. 120 | */ 121 | var Documentation = { 122 | 123 | init : function() { 124 | this.fixFirefoxAnchorBug(); 125 | this.highlightSearchWords(); 126 | this.initIndexTable(); 127 | 128 | }, 129 | 130 | /** 131 | * i18n support 132 | */ 133 | TRANSLATIONS : {}, 134 | PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, 135 | LOCALE : 'unknown', 136 | 137 | // gettext and ngettext don't access this so that the functions 138 | // can safely bound to a different name (_ = Documentation.gettext) 139 | gettext : function(string) { 140 | var translated = Documentation.TRANSLATIONS[string]; 141 | if (typeof translated == 'undefined') 142 | return string; 143 | return (typeof translated == 'string') ? translated : translated[0]; 144 | }, 145 | 146 | ngettext : function(singular, plural, n) { 147 | var translated = Documentation.TRANSLATIONS[singular]; 148 | if (typeof translated == 'undefined') 149 | return (n == 1) ? singular : plural; 150 | return translated[Documentation.PLURALEXPR(n)]; 151 | }, 152 | 153 | addTranslations : function(catalog) { 154 | for (var key in catalog.messages) 155 | this.TRANSLATIONS[key] = catalog.messages[key]; 156 | this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); 157 | this.LOCALE = catalog.locale; 158 | }, 159 | 160 | /** 161 | * add context elements like header anchor links 162 | */ 163 | addContextElements : function() { 164 | $('div[id] > :header:first').each(function() { 165 | $('\u00B6'). 166 | attr('href', '#' + this.id). 167 | attr('title', _('Permalink to this headline')). 168 | appendTo(this); 169 | }); 170 | $('dt[id]').each(function() { 171 | $('\u00B6'). 172 | attr('href', '#' + this.id). 173 | attr('title', _('Permalink to this definition')). 174 | appendTo(this); 175 | }); 176 | }, 177 | 178 | /** 179 | * workaround a firefox stupidity 180 | * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 181 | */ 182 | fixFirefoxAnchorBug : function() { 183 | if (document.location.hash) 184 | window.setTimeout(function() { 185 | document.location.href += ''; 186 | }, 10); 187 | }, 188 | 189 | /** 190 | * highlight the search words provided in the url in the text 191 | */ 192 | highlightSearchWords : function() { 193 | var params = $.getQueryParameters(); 194 | var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; 195 | if (terms.length) { 196 | var body = $('div.body'); 197 | if (!body.length) { 198 | body = $('body'); 199 | } 200 | window.setTimeout(function() { 201 | $.each(terms, function() { 202 | body.highlightText(this.toLowerCase(), 'highlighted'); 203 | }); 204 | }, 10); 205 | $('') 207 | .appendTo($('#searchbox')); 208 | } 209 | }, 210 | 211 | /** 212 | * init the domain index toggle buttons 213 | */ 214 | initIndexTable : function() { 215 | var togglers = $('img.toggler').click(function() { 216 | var src = $(this).attr('src'); 217 | var idnum = $(this).attr('id').substr(7); 218 | $('tr.cg-' + idnum).toggle(); 219 | if (src.substr(-9) == 'minus.png') 220 | $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); 221 | else 222 | $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); 223 | }).css('display', ''); 224 | if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { 225 | togglers.click(); 226 | } 227 | }, 228 | 229 | /** 230 | * helper function to hide the search marks again 231 | */ 232 | hideSearchWords : function() { 233 | $('#searchbox .highlight-link').fadeOut(300); 234 | $('span.highlighted').removeClass('highlighted'); 235 | }, 236 | 237 | /** 238 | * make the url absolute 239 | */ 240 | makeURL : function(relativeURL) { 241 | return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; 242 | }, 243 | 244 | /** 245 | * get the current relative url 246 | */ 247 | getCurrentURL : function() { 248 | var path = document.location.pathname; 249 | var parts = path.split(/\//); 250 | $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { 251 | if (this == '..') 252 | parts.pop(); 253 | }); 254 | var url = parts.join('/'); 255 | return path.substring(url.lastIndexOf('/') + 1, path.length - 1); 256 | }, 257 | 258 | initOnKeyListeners: function() { 259 | $(document).keyup(function(event) { 260 | var activeElementType = document.activeElement.tagName; 261 | // don't navigate when in search box or textarea 262 | if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { 263 | switch (event.keyCode) { 264 | case 37: // left 265 | var prevHref = $('link[rel="prev"]').prop('href'); 266 | if (prevHref) { 267 | window.location.href = prevHref; 268 | return false; 269 | } 270 | case 39: // right 271 | var nextHref = $('link[rel="next"]').prop('href'); 272 | if (nextHref) { 273 | window.location.href = nextHref; 274 | return false; 275 | } 276 | } 277 | } 278 | }); 279 | } 280 | }; 281 | 282 | // quick alias for translations 283 | _ = Documentation.gettext; 284 | 285 | $(document).ready(function() { 286 | Documentation.init(); 287 | }); -------------------------------------------------------------------------------- /docs/_build_html/_static/doctools.js: -------------------------------------------------------------------------------- 1 | /* 2 | * doctools.js 3 | * ~~~~~~~~~~~ 4 | * 5 | * Sphinx JavaScript utilities for all documentation. 6 | * 7 | * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. 8 | * :license: BSD, see LICENSE for details. 9 | * 10 | */ 11 | 12 | /** 13 | * select a different prefix for underscore 14 | */ 15 | $u = _.noConflict(); 16 | 17 | /** 18 | * make the code below compatible with browsers without 19 | * an installed firebug like debugger 20 | if (!window.console || !console.firebug) { 21 | var names = ["log", "debug", "info", "warn", "error", "assert", "dir", 22 | "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", 23 | "profile", "profileEnd"]; 24 | window.console = {}; 25 | for (var i = 0; i < names.length; ++i) 26 | window.console[names[i]] = function() {}; 27 | } 28 | */ 29 | 30 | /** 31 | * small helper function to urldecode strings 32 | */ 33 | jQuery.urldecode = function(x) { 34 | return decodeURIComponent(x).replace(/\+/g, ' '); 35 | }; 36 | 37 | /** 38 | * small helper function to urlencode strings 39 | */ 40 | jQuery.urlencode = encodeURIComponent; 41 | 42 | /** 43 | * This function returns the parsed url parameters of the 44 | * current request. Multiple values per key are supported, 45 | * it will always return arrays of strings for the value parts. 46 | */ 47 | jQuery.getQueryParameters = function(s) { 48 | if (typeof s == 'undefined') 49 | s = document.location.search; 50 | var parts = s.substr(s.indexOf('?') + 1).split('&'); 51 | var result = {}; 52 | for (var i = 0; i < parts.length; i++) { 53 | var tmp = parts[i].split('=', 2); 54 | var key = jQuery.urldecode(tmp[0]); 55 | var value = jQuery.urldecode(tmp[1]); 56 | if (key in result) 57 | result[key].push(value); 58 | else 59 | result[key] = [value]; 60 | } 61 | return result; 62 | }; 63 | 64 | /** 65 | * highlight a given string on a jquery object by wrapping it in 66 | * span elements with the given class name. 67 | */ 68 | jQuery.fn.highlightText = function(text, className) { 69 | function highlight(node) { 70 | if (node.nodeType == 3) { 71 | var val = node.nodeValue; 72 | var pos = val.toLowerCase().indexOf(text); 73 | if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { 74 | var span = document.createElement("span"); 75 | span.className = className; 76 | span.appendChild(document.createTextNode(val.substr(pos, text.length))); 77 | node.parentNode.insertBefore(span, node.parentNode.insertBefore( 78 | document.createTextNode(val.substr(pos + text.length)), 79 | node.nextSibling)); 80 | node.nodeValue = val.substr(0, pos); 81 | } 82 | } 83 | else if (!jQuery(node).is("button, select, textarea")) { 84 | jQuery.each(node.childNodes, function() { 85 | highlight(this); 86 | }); 87 | } 88 | } 89 | return this.each(function() { 90 | highlight(this); 91 | }); 92 | }; 93 | 94 | /* 95 | * backward compatibility for jQuery.browser 96 | * This will be supported until firefox bug is fixed. 97 | */ 98 | if (!jQuery.browser) { 99 | jQuery.uaMatch = function(ua) { 100 | ua = ua.toLowerCase(); 101 | 102 | var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 103 | /(webkit)[ \/]([\w.]+)/.exec(ua) || 104 | /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 105 | /(msie) ([\w.]+)/.exec(ua) || 106 | ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 107 | []; 108 | 109 | return { 110 | browser: match[ 1 ] || "", 111 | version: match[ 2 ] || "0" 112 | }; 113 | }; 114 | jQuery.browser = {}; 115 | jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; 116 | } 117 | 118 | /** 119 | * Small JavaScript module for the documentation. 120 | */ 121 | var Documentation = { 122 | 123 | init : function() { 124 | this.fixFirefoxAnchorBug(); 125 | this.highlightSearchWords(); 126 | this.initIndexTable(); 127 | 128 | }, 129 | 130 | /** 131 | * i18n support 132 | */ 133 | TRANSLATIONS : {}, 134 | PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, 135 | LOCALE : 'unknown', 136 | 137 | // gettext and ngettext don't access this so that the functions 138 | // can safely bound to a different name (_ = Documentation.gettext) 139 | gettext : function(string) { 140 | var translated = Documentation.TRANSLATIONS[string]; 141 | if (typeof translated == 'undefined') 142 | return string; 143 | return (typeof translated == 'string') ? translated : translated[0]; 144 | }, 145 | 146 | ngettext : function(singular, plural, n) { 147 | var translated = Documentation.TRANSLATIONS[singular]; 148 | if (typeof translated == 'undefined') 149 | return (n == 1) ? singular : plural; 150 | return translated[Documentation.PLURALEXPR(n)]; 151 | }, 152 | 153 | addTranslations : function(catalog) { 154 | for (var key in catalog.messages) 155 | this.TRANSLATIONS[key] = catalog.messages[key]; 156 | this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); 157 | this.LOCALE = catalog.locale; 158 | }, 159 | 160 | /** 161 | * add context elements like header anchor links 162 | */ 163 | addContextElements : function() { 164 | $('div[id] > :header:first').each(function() { 165 | $('\u00B6'). 166 | attr('href', '#' + this.id). 167 | attr('title', _('Permalink to this headline')). 168 | appendTo(this); 169 | }); 170 | $('dt[id]').each(function() { 171 | $('\u00B6'). 172 | attr('href', '#' + this.id). 173 | attr('title', _('Permalink to this definition')). 174 | appendTo(this); 175 | }); 176 | }, 177 | 178 | /** 179 | * workaround a firefox stupidity 180 | * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 181 | */ 182 | fixFirefoxAnchorBug : function() { 183 | if (document.location.hash) 184 | window.setTimeout(function() { 185 | document.location.href += ''; 186 | }, 10); 187 | }, 188 | 189 | /** 190 | * highlight the search words provided in the url in the text 191 | */ 192 | highlightSearchWords : function() { 193 | var params = $.getQueryParameters(); 194 | var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; 195 | if (terms.length) { 196 | var body = $('div.body'); 197 | if (!body.length) { 198 | body = $('body'); 199 | } 200 | window.setTimeout(function() { 201 | $.each(terms, function() { 202 | body.highlightText(this.toLowerCase(), 'highlighted'); 203 | }); 204 | }, 10); 205 | $('') 207 | .appendTo($('#searchbox')); 208 | } 209 | }, 210 | 211 | /** 212 | * init the domain index toggle buttons 213 | */ 214 | initIndexTable : function() { 215 | var togglers = $('img.toggler').click(function() { 216 | var src = $(this).attr('src'); 217 | var idnum = $(this).attr('id').substr(7); 218 | $('tr.cg-' + idnum).toggle(); 219 | if (src.substr(-9) == 'minus.png') 220 | $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); 221 | else 222 | $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); 223 | }).css('display', ''); 224 | if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { 225 | togglers.click(); 226 | } 227 | }, 228 | 229 | /** 230 | * helper function to hide the search marks again 231 | */ 232 | hideSearchWords : function() { 233 | $('#searchbox .highlight-link').fadeOut(300); 234 | $('span.highlighted').removeClass('highlighted'); 235 | }, 236 | 237 | /** 238 | * make the url absolute 239 | */ 240 | makeURL : function(relativeURL) { 241 | return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; 242 | }, 243 | 244 | /** 245 | * get the current relative url 246 | */ 247 | getCurrentURL : function() { 248 | var path = document.location.pathname; 249 | var parts = path.split(/\//); 250 | $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { 251 | if (this == '..') 252 | parts.pop(); 253 | }); 254 | var url = parts.join('/'); 255 | return path.substring(url.lastIndexOf('/') + 1, path.length - 1); 256 | }, 257 | 258 | initOnKeyListeners: function() { 259 | $(document).keyup(function(event) { 260 | var activeElementType = document.activeElement.tagName; 261 | // don't navigate when in search box or textarea 262 | if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { 263 | switch (event.keyCode) { 264 | case 37: // left 265 | var prevHref = $('link[rel="prev"]').prop('href'); 266 | if (prevHref) { 267 | window.location.href = prevHref; 268 | return false; 269 | } 270 | case 39: // right 271 | var nextHref = $('link[rel="next"]').prop('href'); 272 | if (nextHref) { 273 | window.location.href = nextHref; 274 | return false; 275 | } 276 | } 277 | } 278 | }); 279 | } 280 | }; 281 | 282 | // quick alias for translations 283 | _ = Documentation.gettext; 284 | 285 | $(document).ready(function() { 286 | Documentation.init(); 287 | }); -------------------------------------------------------------------------------- /docs/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # django_wechat documentation build configuration file, created by 4 | # sphinx-quickstart on Sat Apr 9 15:12:39 2016. 5 | # 6 | # This file is execfile()d with the current directory set to its 7 | # containing dir. 8 | # 9 | # Note that not all possible configuration values are present in this 10 | # autogenerated file. 11 | # 12 | # All configuration values have a default; values that are commented out 13 | # serve to show the default. 14 | 15 | import sys 16 | import os 17 | 18 | # If extensions (or modules to document with autodoc) are in another directory, 19 | # add these directories to sys.path here. If the directory is relative to the 20 | # documentation root, use os.path.abspath to make it absolute, like shown here. 21 | #sys.path.insert(0, os.path.abspath('.')) 22 | 23 | # -- General configuration ------------------------------------------------ 24 | 25 | # If your documentation needs a minimal Sphinx version, state it here. 26 | #needs_sphinx = '1.0' 27 | 28 | # Add any Sphinx extension module names here, as strings. They can be 29 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 30 | # ones. 31 | extensions = [] 32 | 33 | # Add any paths that contain templates here, relative to this directory. 34 | templates_path = ['_templates'] 35 | 36 | # The suffix(es) of source filenames. 37 | # You can specify multiple suffix as a list of string: 38 | # source_suffix = ['.rst', '.md'] 39 | source_suffix = '.rst' 40 | 41 | # The encoding of source files. 42 | #source_encoding = 'utf-8-sig' 43 | 44 | # The master toctree document. 45 | master_doc = 'index' 46 | 47 | # General information about the project. 48 | project = u'django_wechat' 49 | copyright = u'2016, chanmo' 50 | author = u'chanmo' 51 | 52 | # The version info for the project you're documenting, acts as replacement for 53 | # |version| and |release|, also used in various other places throughout the 54 | # built documents. 55 | # 56 | # The short X.Y version. 57 | version = u'3.0' 58 | # The full version, including alpha/beta/rc tags. 59 | release = u'3.0' 60 | 61 | # The language for content autogenerated by Sphinx. Refer to documentation 62 | # for a list of supported languages. 63 | # 64 | # This is also used if you do content translation via gettext catalogs. 65 | # Usually you set "language" from the command line for these cases. 66 | language = 'zh-hans' 67 | 68 | # There are two options for replacing |today|: either, you set today to some 69 | # non-false value, then it is used: 70 | #today = '' 71 | # Else, today_fmt is used as the format for a strftime call. 72 | #today_fmt = '%B %d, %Y' 73 | 74 | # List of patterns, relative to source directory, that match files and 75 | # directories to ignore when looking for source files. 76 | exclude_patterns = ['_build'] 77 | 78 | # The reST default role (used for this markup: `text`) to use for all 79 | # documents. 80 | #default_role = None 81 | 82 | # If true, '()' will be appended to :func: etc. cross-reference text. 83 | #add_function_parentheses = True 84 | 85 | # If true, the current module name will be prepended to all description 86 | # unit titles (such as .. function::). 87 | #add_module_names = True 88 | 89 | # If true, sectionauthor and moduleauthor directives will be shown in the 90 | # output. They are ignored by default. 91 | #show_authors = False 92 | 93 | # The name of the Pygments (syntax highlighting) style to use. 94 | pygments_style = 'sphinx' 95 | 96 | # A list of ignored prefixes for module index sorting. 97 | #modindex_common_prefix = [] 98 | 99 | # If true, keep warnings as "system message" paragraphs in the built documents. 100 | #keep_warnings = False 101 | 102 | # If true, `todo` and `todoList` produce output, else they produce nothing. 103 | todo_include_todos = False 104 | 105 | 106 | # -- Options for HTML output ---------------------------------------------- 107 | 108 | # The theme to use for HTML and HTML Help pages. See the documentation for 109 | # a list of builtin themes. 110 | html_theme = 'sphinx_rtd_theme' 111 | 112 | # Theme options are theme-specific and customize the look and feel of a theme 113 | # further. For a list of options available for each theme, see the 114 | # documentation. 115 | #html_theme_options = {} 116 | 117 | # Add any paths that contain custom themes here, relative to this directory. 118 | #html_theme_path = [] 119 | 120 | # The name for this set of Sphinx documents. If None, it defaults to 121 | # " v documentation". 122 | #html_title = None 123 | 124 | # A shorter title for the navigation bar. Default is the same as html_title. 125 | #html_short_title = None 126 | 127 | # The name of an image file (relative to this directory) to place at the top 128 | # of the sidebar. 129 | #html_logo = None 130 | 131 | # The name of an image file (relative to this directory) to use as a favicon of 132 | # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 133 | # pixels large. 134 | #html_favicon = None 135 | 136 | # Add any paths that contain custom static files (such as style sheets) here, 137 | # relative to this directory. They are copied after the builtin static files, 138 | # so a file named "default.css" will overwrite the builtin "default.css". 139 | html_static_path = ['_static'] 140 | 141 | # Add any extra paths that contain custom files (such as robots.txt or 142 | # .htaccess) here, relative to this directory. These files are copied 143 | # directly to the root of the documentation. 144 | #html_extra_path = [] 145 | 146 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, 147 | # using the given strftime format. 148 | #html_last_updated_fmt = '%b %d, %Y' 149 | 150 | # If true, SmartyPants will be used to convert quotes and dashes to 151 | # typographically correct entities. 152 | #html_use_smartypants = True 153 | 154 | # Custom sidebar templates, maps document names to template names. 155 | #html_sidebars = {} 156 | 157 | # Additional templates that should be rendered to pages, maps page names to 158 | # template names. 159 | #html_additional_pages = {} 160 | 161 | # If false, no module index is generated. 162 | #html_domain_indices = True 163 | 164 | # If false, no index is generated. 165 | #html_use_index = True 166 | 167 | # If true, the index is split into individual pages for each letter. 168 | #html_split_index = False 169 | 170 | # If true, links to the reST sources are added to the pages. 171 | #html_show_sourcelink = True 172 | 173 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. 174 | #html_show_sphinx = True 175 | 176 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. 177 | #html_show_copyright = True 178 | 179 | # If true, an OpenSearch description file will be output, and all pages will 180 | # contain a tag referring to it. The value of this option must be the 181 | # base URL from which the finished HTML is served. 182 | #html_use_opensearch = '' 183 | 184 | # This is the file name suffix for HTML files (e.g. ".xhtml"). 185 | #html_file_suffix = None 186 | 187 | # Language to be used for generating the HTML full-text search index. 188 | # Sphinx supports the following languages: 189 | # 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' 190 | # 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' 191 | #html_search_language = 'en' 192 | 193 | # A dictionary with options for the search language support, empty by default. 194 | # Now only 'ja' uses this config value 195 | #html_search_options = {'type': 'default'} 196 | 197 | # The name of a javascript file (relative to the configuration directory) that 198 | # implements a search results scorer. If empty, the default will be used. 199 | #html_search_scorer = 'scorer.js' 200 | 201 | # Output file base name for HTML help builder. 202 | htmlhelp_basename = 'django_wechatdoc' 203 | 204 | # -- Options for LaTeX output --------------------------------------------- 205 | 206 | latex_elements = { 207 | # The paper size ('letterpaper' or 'a4paper'). 208 | #'papersize': 'letterpaper', 209 | 210 | # The font size ('10pt', '11pt' or '12pt'). 211 | #'pointsize': '10pt', 212 | 213 | # Additional stuff for the LaTeX preamble. 214 | #'preamble': '', 215 | 216 | # Latex figure (float) alignment 217 | #'figure_align': 'htbp', 218 | } 219 | 220 | # Grouping the document tree into LaTeX files. List of tuples 221 | # (source start file, target name, title, 222 | # author, documentclass [howto, manual, or own class]). 223 | latex_documents = [ 224 | (master_doc, 'django_wechat.tex', u'django\\_wechat Documentation', 225 | u'chanmo', 'manual'), 226 | ] 227 | 228 | # The name of an image file (relative to this directory) to place at the top of 229 | # the title page. 230 | #latex_logo = None 231 | 232 | # For "manual" documents, if this is true, then toplevel headings are parts, 233 | # not chapters. 234 | #latex_use_parts = False 235 | 236 | # If true, show page references after internal links. 237 | #latex_show_pagerefs = False 238 | 239 | # If true, show URL addresses after external links. 240 | #latex_show_urls = False 241 | 242 | # Documents to append as an appendix to all manuals. 243 | #latex_appendices = [] 244 | 245 | # If false, no module index is generated. 246 | #latex_domain_indices = True 247 | 248 | 249 | # -- Options for manual page output --------------------------------------- 250 | 251 | # One entry per manual page. List of tuples 252 | # (source start file, name, description, authors, manual section). 253 | man_pages = [ 254 | (master_doc, 'django_wechat', u'django_wechat Documentation', 255 | [author], 1) 256 | ] 257 | 258 | # If true, show URL addresses after external links. 259 | #man_show_urls = False 260 | 261 | 262 | # -- Options for Texinfo output ------------------------------------------- 263 | 264 | # Grouping the document tree into Texinfo files. List of tuples 265 | # (source start file, target name, title, author, 266 | # dir menu entry, description, category) 267 | texinfo_documents = [ 268 | (master_doc, 'django_wechat', u'django_wechat Documentation', 269 | author, 'django_wechat', 'One line description of project.', 270 | 'Miscellaneous'), 271 | ] 272 | 273 | # Documents to append as an appendix to all manuals. 274 | #texinfo_appendices = [] 275 | 276 | # If false, no module index is generated. 277 | #texinfo_domain_indices = True 278 | 279 | # How to display URL addresses: 'footnote', 'no', or 'inline'. 280 | #texinfo_show_urls = 'footnote' 281 | 282 | # If true, do not generate a @detailmenu in the "Top" node's menu. 283 | #texinfo_no_detailmenu = False 284 | -------------------------------------------------------------------------------- /docs/_build/html/_static/underscore.js: -------------------------------------------------------------------------------- 1 | // Underscore.js 1.3.1 2 | // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. 3 | // Underscore is freely distributable under the MIT license. 4 | // Portions of Underscore are inspired or borrowed from Prototype, 5 | // Oliver Steele's Functional, and John Resig's Micro-Templating. 6 | // For all details and documentation: 7 | // http://documentcloud.github.com/underscore 8 | (function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== 9 | c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, 10 | h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= 11 | b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e2;a== 12 | null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= 13 | function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= 14 | e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= 15 | function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, 17 | c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}}; 24 | b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, 25 | 1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; 26 | b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; 27 | b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), 28 | function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ 29 | u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= 30 | function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= 31 | true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); 32 | -------------------------------------------------------------------------------- /docs/_build_html/_static/underscore.js: -------------------------------------------------------------------------------- 1 | // Underscore.js 1.3.1 2 | // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. 3 | // Underscore is freely distributable under the MIT license. 4 | // Portions of Underscore are inspired or borrowed from Prototype, 5 | // Oliver Steele's Functional, and John Resig's Micro-Templating. 6 | // For all details and documentation: 7 | // http://documentcloud.github.com/underscore 8 | (function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== 9 | c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, 10 | h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= 11 | b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e2;a== 12 | null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= 13 | function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= 14 | e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= 15 | function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, 17 | c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}}; 24 | b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, 25 | 1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; 26 | b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; 27 | b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), 28 | function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ 29 | u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= 30 | function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= 31 | true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); 32 | --------------------------------------------------------------------------------