honmaple 7 years ago
parent
commit
780bbb2301

+ 4 - 77
README.org

@@ -1,9 +1,9 @@
-* Honmaple
+* maple-bbs
 
   [[LICENSE][https://img.shields.io/badge/license-GPL3.0-blue.svg]]
   [[https://www.python.org][https://img.shields.io/badge/python-3.4-brightgreen.svg]]
 
-  [[english][English]] | [[chinese][中文]]
+  [[README.org][English]] | [[README_zh.org][中文]]
 
   [[https://raw.githubusercontent.com/honmaple/maple-bbs/master/screenshooter/index.png]]
   [[https://raw.githubusercontent.com/honmaple/maple-bbs/master/screenshooter/board.png]]
@@ -12,9 +12,7 @@
 
   This is a free,open-source forums system based on the flask
   
-  #<<english>>
-
-  *If you have used honmaple before 2017-4-1,please use upgrade script to upgrade data*
+  *If you have used maple-bbs before 2017-4-1,please use upgrade script to upgrade data*
   
   *important !* : please modify script to configure as your own database.
   #+BEGIN_SRC sh
@@ -79,79 +77,8 @@
 ** Demo
    Please visit [[https://forums.honmaple.org][forums.honmaple.org]] 
 
-   #<<chinese>>
-   *如果你在4月1日之前部署过,请使用升级脚本升级你的数据*
-
-   *重要!*,请修改升级脚本为你自己的数据库
-   #+BEGIN_SRC sh
-    # session1:old database
-    # session2:new database
-    python upgrade.py
-    python upgrade_count.py
-   #+END_SRC
-    
-** 功能
-   + 注册,登陆,忘记密码
-   + 版块及节点分类
-   + 主题收藏
-   + 回复点赞
-   + 关注用户,节点,主题
-   + 隐私设置
-   + 可选markdown提问
-   + 节点rss
-   + 头像...
-   + 全文搜索(基于whoosh)
-     
-** 安装
-   创建虚拟环境
-
-   #+BEGIN_SRC sh
-    mkvirtualenv forums
-   #+END_SRC
-   
-*** 安装需要的包
-    #+BEGIN_SRC python
-    pip install -r requirements.txt
-    #+END_SRC
-
-*** 配置
-    #+BEGIN_SRC shell
-    mv config.example config.py
-    #+END_SRC
-    记得修改配置文件
-    
-*** 初始化数据库
-    #+BEGIN_SRC python
-    python manager.py db init 
-    python manager.py db migrate -m "first migrate"
-    python manager.py db upgrade
-    #+END_SRC
-    或者
-    #+BEGIN_SRC sh
-    python manager.py init_db
-    #+END_SRC
-    
-*** 创建全文搜索索引
-    #+BEGIN_SRC sh
-    python manager.py create_index
-    #+END_SRC
-
-*** 创建管理员账户
-    #+BEGIN_SRC shell
-    python manager.py create_user
-    #+END_SRC
-    
-*** 登陆并访问后台
-    #+BEGIN_SRC sh
-    python runserver.py
-    #+END_SRC
-    然后访问*forums.localhost:5000/admin*去增加一些东西
-
-** 演示
-   请访问 [[https://forums.honmaple.org][forums.honmaple.org]] 
-
 ** License
-   Honmaple is open-sourced software licensed under the GPL3 license
+   maple-bbs is open-sourced software licensed under the GPL3 license
 
 
 

+ 81 - 0
README_zh.org

@@ -0,0 +1,81 @@
+* maple-bbs
+
+  [[LICENSE][https://img.shields.io/badge/license-GPL3.0-blue.svg]]
+  [[https://www.python.org][https://img.shields.io/badge/python-3.4-brightgreen.svg]]
+
+  [[https://raw.githubusercontent.com/honmaple/maple-bbs/master/screenshooter/index.png]]
+  [[https://raw.githubusercontent.com/honmaple/maple-bbs/master/screenshooter/board.png]]
+  [[https://raw.githubusercontent.com/honmaple/maple-bbs/master/screenshooter/ask.png]]
+
+   *如果你在4月1日之前部署过,请使用升级脚本升级你的数据*
+
+   *重要!*,请修改升级脚本为你自己的数据库
+   #+BEGIN_SRC sh
+    # session1:old database
+    # session2:new database
+    python upgrade.py
+    python upgrade_count.py
+   #+END_SRC
+
+** 功能
+   + 注册,登陆,忘记密码
+   + 版块及节点分类
+   + 主题收藏
+   + 回复点赞
+   + 关注用户,节点,主题
+   + 隐私设置
+   + 可选markdown提问
+   + 节点rss
+   + 头像...
+   + 全文搜索(基于whoosh)
+
+** 安装
+   创建虚拟环境
+
+   #+BEGIN_SRC sh
+    mkvirtualenv forums
+   #+END_SRC
+
+*** 安装需要的包
+    #+BEGIN_SRC python
+    pip install -r requirements.txt
+    #+END_SRC
+
+*** 配置
+    #+BEGIN_SRC shell
+    mv config.example config.py
+    #+END_SRC
+    记得修改配置文件
+
+*** 初始化数据库
+    #+BEGIN_SRC python
+    python manager.py db init
+    python manager.py db migrate -m "first migrate"
+    python manager.py db upgrade
+    #+END_SRC
+    或者
+    #+BEGIN_SRC sh
+    python manager.py init_db
+    #+END_SRC
+
+*** 创建全文搜索索引
+    #+BEGIN_SRC sh
+    python manager.py create_index
+    #+END_SRC
+
+*** 创建管理员账户
+    #+BEGIN_SRC shell
+    python manager.py create_user
+    #+END_SRC
+
+*** 登陆并访问后台
+    #+BEGIN_SRC sh
+    python runserver.py
+    #+END_SRC
+    然后访问*forums.localhost:5000/admin*去增加一些东西
+
+** 演示
+   请访问 [[https://forums.honmaple.org][forums.honmaple.org]]
+
+** License
+   maple-bbs is open-sourced software licensed under the GPL3 license

+ 12 - 41
forums/__init__.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2017-01-25 20:10:50 (CST)
-# Last Update:星期六 2017-4-15 22:50:0 (CST)
+# Last Update:星期五 2017-11-10 11:04:58 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -14,12 +14,9 @@ import os
 
 from flask import Flask
 
-from flask_maple.lazy import LazyExtension
-from forums.admin.urls import admin
-
-from .app import register_app
-from .filters import register_jinja2
-from .logs import register_logging
+from forums import app as ap, extension
+from forums import filters, logs, subdomain
+from forums import api, docs, admin
 
 
 def create_app(config):
@@ -30,40 +27,14 @@ def create_app(config):
 
     app = Flask(__name__, template_folder=templates, static_folder=static)
     app.config.from_object(config)
-    if app.config['SUBDOMAIN']['forums']:
-        app.url_map._rules.clear()
-        app.url_map._rules_by_endpoint.clear()
-        app.url_map.default_subdomain = 'forums'
-        app.add_url_rule(
-            app.static_url_path + '/<path:filename>',
-            endpoint='static',
-            view_func=app.send_static_file,
-            subdomain='forums')
-    register(app)
-    return app
-
-
-def register(app):
-    register_extension(app)
-    register_router(app)
-    register_logging(app)
-    register_jinja2(app)
-    register_app(app)
 
-
-def register_router(app):
-    from forums.api.urls import api_routers
-    from forums.docs.urls import docs_routers
-    api_routers(app)
-    docs_routers(app)
-
-
-def register_extension(app):
-    extension = LazyExtension(
-        module='forums.extension.',
-        extension=['db', 'avatar', 'cache', 'csrf', 'bootstrap', 'captcha',
-                   'error', 'redis_data', 'principal', 'babel',
-                   'login_manager', 'maple_app', 'mail', 'middleware',
-                   'search'])
+    subdomain.init_app(app)
+    ap.init_app(app)
+    filters.init_app(app)
+    logs.init_app(app)
     extension.init_app(app)
     admin.init_app(app)
+    # router
+    api.init_app(app)
+    docs.init_app(app)
+    return app

+ 14 - 1
forums/admin/__init__.py

@@ -6,7 +6,20 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-10-28 10:02:51 (CST)
-# Last Update:星期五 2016-10-28 10:2:51 (CST)
+# Last Update:星期五 2017-11-10 11:10:02 (CST)
 #          By:
 # Description:
 # **************************************************************************
+from flask_admin import Admin
+from forums.admin import forums, user, topic, message
+# from forums.admin import permission
+
+admin = Admin(name='HonMaple', template_mode='bootstrap3')
+
+
+def init_app(app):
+    forums.init_admin(admin)
+    user.init_admin(admin)
+    topic.init_admin(admin)
+    message.init_admin(admin)
+    # permission.init_admin(admin)

+ 2 - 2
forums/admin/forums.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-17 13:12:23 (CST)
-# Last Update:星期三 2017-3-29 21:5:42 (CST)
+# Last Update:星期五 2017-11-10 11:04:16 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -25,7 +25,7 @@ class TagView(BaseView):
     form_excluded_columns = ('topics', 'followers')
 
 
-def register_forums(admin):
+def init_admin(admin):
     admin.add_view(
         BoardView(
             Board,

+ 2 - 2
forums/admin/message.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2017-04-01 18:52:43 (CST)
-# Last Update:星期六 2017-4-1 18:55:37 (CST)
+# Last Update:星期五 2017-11-10 11:06:11 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -25,7 +25,7 @@ class MessageView(BaseView):
     # form_excluded_columns = ('topics', 'followers')
 
 
-def register_message(admin):
+def init_admin(admin):
     admin.add_view(
         MessageView(
             Message,

+ 2 - 3
forums/admin/permission.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-17 09:39:36 (CST)
-# Last Update:星期三 2017-3-29 13:12:47 (CST)
+# Last Update:星期五 2017-11-10 11:09:37 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -14,7 +14,6 @@ from .views import BaseView
 from forums.extension import db
 from flask_maple.permission.models import Group, Router, Permission
 
-__all__ = ['register_permission']
 
 
 class GroupView(BaseView):
@@ -40,7 +39,7 @@ class PermissionView(BaseView):
     }
 
 
-def register_permission(admin):
+def init_admin(admin):
     admin.add_view(
         GroupView(
             Group,

+ 2 - 2
forums/admin/topic.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-17 13:01:43 (CST)
-# Last Update:星期三 2017-3-29 20:15:59 (CST)
+# Last Update:星期五 2017-11-10 11:06:21 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -43,7 +43,7 @@ class ReplyView(BaseView):
     form_widget_args = {'content': {'rows': 10}}
 
 
-def register_topic(admin):
+def init_admin(admin):
     admin.add_view(
         TopicView(
             Topic,

+ 0 - 24
forums/admin/urls.py

@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# **************************************************************************
-# Copyright © 2016 jianglin
-# File Name: urls.py
-# Author: jianglin
-# Email: xiyang0807@gmail.com
-# Created: 2016-10-28 10:15:42 (CST)
-# Last Update:星期六 2017-4-1 18:55:17 (CST)
-#          By:
-# Description:
-# **************************************************************************
-from forums.extension import admin
-from .forums import register_forums
-# from .permission import register_permission
-from .user import register_user
-from .topic import register_topic
-from .message import register_message
-
-register_forums(admin)
-register_user(admin)
-register_topic(admin)
-register_message(admin)
-# register_permission(admin)

+ 2 - 2
forums/admin/user.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-17 11:57:11 (CST)
-# Last Update:星期六 2017-4-1 21:21:49 (CST)
+# Last Update:星期五 2017-11-10 11:05:56 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -62,7 +62,7 @@ class UserSettingView(BaseView):
     }
 
 
-def register_user(admin):
+def init_admin(admin):
     admin.add_view(
         UserView(
             User,

+ 43 - 1
forums/api/__init__.py

@@ -6,7 +6,49 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-11-20 15:49:33 (CST)
-# Last Update:星期日 2016-11-20 15:49:34 (CST)
+# Last Update:星期五 2017-11-10 11:54:03 (CST)
 #          By:
 # Description:
 # **************************************************************************
+from forums.api.forums import urls as forums_url
+from forums.api.auth import urls as auth_url
+from forums.api.user import urls as user_url
+from forums.api.tag import urls as tag_url
+from forums.api.topic import urls as topic_url
+from forums.api.collect import urls as collect_url
+from forums.api.message import urls as message_url
+from forums.api.setting import urls as setting_url
+from forums.api.upload import urls as upload_url
+from forums.api.follow import urls as follow_url
+from forums.api.search import urls as search_url
+from importlib import import_module
+
+
+def init_app(app):
+    forums_url.init_app(app)
+    user_url.init_app(app)
+    tag_url.init_app(app)
+    topic_url.init_app(app)
+    auth_url.init_app(app)
+    collect_url.init_app(app)
+    message_url.init_app(app)
+    follow_url.init_app(app)
+    setting_url.init_app(app)
+    upload_url.init_app(app)
+    search_url.init_app(app)
+    # blueprints = [
+    #     'forums.api.forums.urls'
+    #     # 'forums.api.auth.urls',
+    #     'forums.api.tag.urls',
+    #     # 'forums.api.topic',
+    #     # 'forums.api.user.urls',
+    #     # 'forums.api.setting',
+    #     # 'forums.api.follow',
+    #     # 'forums.api.upload',
+    #     # 'forums.api.collect',
+    #     # 'forums.api.message',
+    #     # 'forums.api.search'
+    # ]
+    # for blueprint in blueprints:
+    #     import_module(blueprint).init_app(app)
+    #     # app.register_blueprint(import_module(blueprint))

+ 5 - 1
forums/api/auth/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-10-28 10:26:16 (CST)
-# Last Update:星期六 2016-12-17 10:42:48 (CST)
+# Last Update:星期五 2017-11-10 10:43:20 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -31,3 +31,7 @@ site.add_url_rule('/register', view_func=register_view)
 site.add_url_rule('/forget', view_func=forget_view)
 site.add_url_rule('/confirm', view_func=confirm_view)
 site.add_url_rule('/confirm/<token>', view_func=confirm_token_view)
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 5 - 1
forums/api/collect/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2017-03-28 16:15:16 (CST)
-# Last Update:星期二 2017-3-28 21:27:14 (CST)
+# Last Update:星期五 2017-11-10 10:57:01 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -21,3 +21,7 @@ site.add_url_rule(
 site.add_url_rule(
     '/topic/<int:topicId>/collect',
     view_func=AddToCollectView.as_view('add_to_collect'))
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 5 - 1
forums/api/follow/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-22 21:49:08 (CST)
-# Last Update:星期四 2017-3-30 15:26:49 (CST)
+# Last Update:星期五 2017-11-10 10:57:11 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -26,3 +26,7 @@ site.add_url_rule('/topics', view_func=topic_view)
 site.add_url_rule('/tags', view_func=tag_view)
 site.add_url_rule('/collects', view_func=collect_view)
 site.add_url_rule('/users', view_func=user_view)
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 5 - 1
forums/api/forums/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-17 22:03:40 (CST)
-# Last Update:星期六 2017-3-25 18:54:51 (CST)
+# Last Update:星期五 2017-11-10 10:42:19 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -26,3 +26,7 @@ site.add_url_rule('/index', view_func=forums_view)
 site.add_url_rule('/forums', view_func=forums_view)
 site.add_url_rule(
     '/forums/<int:boardId>', view_func=BoardView.as_view('board'))
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 5 - 1
forums/api/message/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2017-04-01 18:34:38 (CST)
-# Last Update:星期六 2017-4-1 20:6:3 (CST)
+# Last Update:星期五 2017-11-10 10:57:22 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -18,3 +18,7 @@ site = Blueprint('message', __name__, url_prefix='/message')
 message_list = MessageListView.as_view('list')
 
 site.add_url_rule('', view_func=message_list)
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 4 - 1
forums/api/search/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2017-03-31 17:27:30 (CST)
-# Last Update:星期五 2017-3-31 17:28:36 (CST)
+# Last Update:星期五 2017-11-10 10:57:29 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -16,3 +16,6 @@ from .views import SearchView
 site = Blueprint('search', __name__)
 
 site.add_url_rule('/search', view_func=SearchView.as_view('search'))
+
+def init_app(app):
+    app.register_blueprint(site)

+ 5 - 1
forums/api/setting/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-20 22:15:58 (CST)
-# Last Update:星期三 2016-12-21 21:8:56 (CST)
+# Last Update:星期五 2017-11-10 10:57:39 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -24,3 +24,7 @@ site.add_url_rule('/profile', view_func=setting_view)
 site.add_url_rule('/password', view_func=password_view)
 site.add_url_rule('/privacy', view_func=privacy_view)
 site.add_url_rule('/babel', view_func=babel_view)
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 3 - 5
forums/api/tag/models.py

@@ -6,14 +6,12 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-15 20:46:13 (CST)
-# Last Update:星期日 2017-4-2 15:5:23 (CST)
+# Last Update:星期五 2017-11-10 10:27:27 (CST)
 #          By:
 # Description:
 # **************************************************************************
 from flask_login import current_user
 from flask_maple.models import ModelMixin
-from forums.api.topic.models import Topic
-from forums.api.user.models import User
 from forums.extension import db
 
 tag_follower = db.Table(
@@ -44,13 +42,13 @@ class Tags(db.Model, ModelMixin):
         lazy='joined',
         uselist=False)
     topics = db.relationship(
-        Topic,
+        'Topic',
         secondary=tag_topic,
         backref=db.backref(
             'tags', lazy='dynamic'),
         lazy='dynamic')
     followers = db.relationship(
-        User,
+        'User',
         secondary=tag_follower,
         backref=db.backref(
             'following_tags', lazy='dynamic'),

+ 5 - 1
forums/api/tag/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-15 22:20:55 (CST)
-# Last Update:星期六 2017-3-25 19:9:0 (CST)
+# Last Update:星期五 2017-11-10 10:43:36 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -23,3 +23,7 @@ site.add_url_rule('', view_func=tag_list)
 site.add_url_rule('', view_func=tag_list)
 site.add_url_rule('/<name>', view_func=tag)
 site.add_url_rule('/<name>/feed', view_func=tag_feed)
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 5 - 1
forums/api/topic/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-15 22:15:34 (CST)
-# Last Update:星期二 2017-3-28 18:1:54 (CST)
+# Last Update:星期五 2017-11-10 10:57:47 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -39,3 +39,7 @@ site.add_url_rule('/topic/<int:topicId>/edit', view_func=edit_view)
 site.add_url_rule('/topic/<int:topicId>/replies', view_func=reply_list)
 site.add_url_rule('/replies/<int:replyId>', view_func=reply)
 site.add_url_rule('/replies/<int:replyId>/like', view_func=like_view)
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 5 - 1
forums/api/upload/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-21 21:56:49 (CST)
-# Last Update:星期三 2016-12-21 21:56:56 (CST)
+# Last Update:星期五 2017-11-10 10:57:55 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -19,3 +19,7 @@ avatar_view = AvatarView.as_view('avatar')
 
 site.add_url_rule('/avatar', view_func=avatar_view)
 site.add_url_rule('/avatars/<filename>', view_func=avatar_file_view)
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 0 - 39
forums/api/urls.py

@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# **************************************************************************
-# Copyright © 2017 jianglin
-# File Name: urls.py
-# Author: jianglin
-# Email: xiyang0807@gmail.com
-# Created: 2017-01-25 20:12:58 (CST)
-# Last Update:星期日 2017-4-16 13:59:3 (CST)
-#          By:
-# Description:
-# **************************************************************************
-from .forums.urls import site as forums_site
-from .auth.urls import site as auth_site
-from .topic.urls import site as topic_site
-from .tag.urls import site as tag_site
-from .user.urls import site as user_site
-from .setting.urls import site as setting_site
-from .follow.urls import site as follow_site
-from .upload.urls import site as upload_site
-from .collect.urls import site as collect_site
-from .message.urls import site as message_site
-from .search.urls import site as search_site
-# from .permission.urls import site as perm_site
-
-
-def api_routers(app):
-    app.register_blueprint(forums_site)
-    app.register_blueprint(auth_site)
-    app.register_blueprint(topic_site)
-    app.register_blueprint(tag_site)
-    app.register_blueprint(user_site)
-    app.register_blueprint(setting_site)
-    app.register_blueprint(follow_site)
-    app.register_blueprint(upload_site)
-    app.register_blueprint(collect_site)
-    app.register_blueprint(message_site)
-    # app.register_blueprint(perm_site)
-    app.register_blueprint(search_site)

+ 5 - 1
forums/api/user/urls.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-12-15 22:24:23 (CST)
-# Last Update:星期日 2017-4-2 21:35:21 (CST)
+# Last Update:星期五 2017-11-10 10:58:03 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -33,3 +33,7 @@ site.add_url_rule('/<username>/replies', view_func=replies)
 site.add_url_rule('/<username>/collects', view_func=collects)
 site.add_url_rule('/<username>/followers', view_func=followers)
 site.add_url_rule('/<username>/followings', view_func=followings)
+
+
+def init_app(app):
+    app.register_blueprint(site)

+ 2 - 2
forums/app.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2017-03-28 16:11:07 (CST)
-# Last Update:星期四 2017-3-30 15:7:20 (CST)
+# Last Update:星期二 2017-9-19 12:49:24 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -15,7 +15,7 @@ from flask_login import current_user
 from .permission import TopicNeed, ReplyNeed, CollectNeed
 
 
-def register_app(app):
+def init_app(app):
     @identity_loaded.connect_via(app)
     def on_identity_loaded(sender, identity):
         '''基础权限'''

+ 9 - 1
forums/docs/__init__.py

@@ -6,7 +6,15 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-11-09 21:06:11 (CST)
-# Last Update:星期三 2016-11-9 21:11:10 (CST)
+# Last Update:星期二 2017-9-19 12:54:23 (CST)
 #          By:
 # Description:
 # **************************************************************************
+from .views import site as docs_site
+
+
+def init_app(app):
+    if app.config['SUBDOMAIN']['docs']:
+        app.register_blueprint(docs_site, subdomain='docs')
+    else:
+        app.register_blueprint(docs_site, url_prefix='/docs')

+ 0 - 20
forums/docs/urls.py

@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# **************************************************************************
-# Copyright © 2017 jianglin
-# File Name: urls.py
-# Author: jianglin
-# Email: xiyang0807@gmail.com
-# Created: 2017-01-25 20:14:36 (CST)
-# Last Update:星期日 2017-4-2 12:15:40 (CST)
-#          By:
-# Description:
-# **************************************************************************
-from .views import site as docs_site
-
-
-def docs_routers(app):
-    if app.config['SUBDOMAIN']['docs']:
-        app.register_blueprint(docs_site, subdomain='docs')
-    else:
-        app.register_blueprint(docs_site, url_prefix='/docs')

+ 20 - 7
forums/extension.py

@@ -6,13 +6,12 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-10-25 21:57:10 (CST)
-# Last Update:星期五 2017-7-28 13:49:33 (CST)
+# Last Update:星期五 2017-11-10 11:03:06 (CST)
 #          By:
 # Description:
 # **************************************************************************
 from flask import request, g, current_app
 from flask_wtf.csrf import CSRFProtect
-from flask_admin import Admin
 from flask_babelex import Babel, Domain
 from flask_babelex import lazy_gettext as _
 from flask_avatar import Avatar
@@ -28,7 +27,7 @@ from flask_maple.mail import Mail
 from flask_principal import Principal
 from flask_login import LoginManager
 from flask_msearch import Search
-from flask_cache import Cache
+from flask_caching import Cache
 import os
 
 
@@ -82,7 +81,6 @@ def register_login():
 
 babel = register_babel()
 db = db
-admin = Admin(name='HonMaple', template_mode='bootstrap3')
 csrf = CSRFProtect()
 bootstrap = Bootstrap(
     css=('styles/monokai.css', 'styles/mine.css',
@@ -105,10 +103,25 @@ search = Search(db=db)
 
 class AvatarCache(Avatar):
     @cache.cached(
-        timeout=180, key_prefix=lambda: "avatar:{}".format(request.path))
-    def avatar(self, text, width):
-        response = super(AvatarCache, self).avatar(text, width)
+        timeout=180, key_prefix=lambda: "avatar:{}".format(request.url))
+    def avatar(self, text, width=128):
+        from flask import abort, make_response
+        from flask_avatar.avatar import GenAvatar
+        width_range = current_app.config.get('AVATAR_RANGE', [0, 512])
+        if width < width_range[0] or width > width_range[1]:
+            abort(404)
+        stream = GenAvatar.generate(width, text)
+        buf_value = stream.getvalue()
+        response = make_response(buf_value)
+        response.headers['Content-Type'] = 'image/jpeg'
         return response
 
 
 avatar = AvatarCache()
+
+
+def init_app(app):
+    for e in [db, avatar, cache, csrf, bootstrap, captcha, error, redis_data,
+              principal, babel, login_manager, maple_app, mail, middleware,
+              search]:
+        e.init_app(app)

+ 2 - 2
forums/filters.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-11-07 21:00:32 (CST)
-# Last Update:星期日 2017-4-9 12:16:40 (CST)
+# Last Update:星期二 2017-9-19 12:50:24 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -87,7 +87,7 @@ def forums_count():
     return redis_data.hgetall(key)
 
 
-def register_jinja2(app):
+def init_app(app):
 
     app.jinja_env.globals['SITE'] = SITE
     app.jinja_env.globals['hot_tags'] = hot_tags

+ 2 - 2
forums/logs.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-11-07 21:43:17 (CST)
-# Last Update:星期六 2017-4-1 23:42:40 (CST)
+# Last Update:星期二 2017-9-19 12:55:28 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -16,7 +16,7 @@ from logging.handlers import SMTPHandler
 from logging import Formatter
 
 
-def register_logging(app):
+def init_app(app):
     config = app.config
     logs_folder = os.path.abspath(
         os.path.join(os.path.dirname(__file__), os.pardir, 'logs'))

+ 24 - 0
forums/subdomain.py

@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# **************************************************************************
+# Copyright © 2017 jianglin
+# File Name: subdomain.py
+# Author: jianglin
+# Email: lin.jiang@upai.com
+# Created: 2017-11-10 10:52:47 (CST)
+# Last Update:星期五 2017-11-10 10:53:04 (CST)
+#          By:
+# Description:
+# **************************************************************************
+
+
+def init_app(app):
+    if app.config['SUBDOMAIN']['forums']:
+        app.url_map._rules.clear()
+        app.url_map._rules_by_endpoint.clear()
+        app.url_map.default_subdomain = 'forums'
+        app.add_url_rule(
+            app.static_url_path + '/<path:filename>',
+            endpoint='static',
+            view_func=app.send_static_file,
+            subdomain='forums')

+ 1 - 1
gunicorn.conf

@@ -1,6 +1,6 @@
 debug = True
 loglevel = 'debug'
 workers = 2
-bind = "127.0.0.1:8080"
+bind = "127.0.0.1:8000"
 worker_class = 'gevent'
 threads = 4

+ 2 - 2
runserver.py

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-10-25 22:01:29 (CST)
-# Last Update:星期六 2017-4-15 20:38:39 (CST)
+# Last Update:星期五 2017-11-10 11:14:52 (CST)
 #          By:
 # Description:
 # **************************************************************************
@@ -17,4 +17,4 @@ app = create_app('config')
 app.wsgi_app = ProxyFix(app.wsgi_app)
 
 if __name__ == '__main__':
-    app.run()
+    app.run(port=8000)

+ 1 - 1
templates/base/panel.html

@@ -16,7 +16,7 @@
 {% else %}
 <div class="panel panel-default">
     <div class="panel-heading">
-        Honmaple
+        honmaple
     </div>
     <div class="panel-body text-center">
         <a class="btn btn-primary" href="{{ url_for('auth.register')}}">

+ 1 - 1
templates/topic/_list_macro.html

@@ -38,7 +38,7 @@
 {% set tags = topic.tags %}
 <div class="col-md-6 media">
   <div class="media-left">
-    {{ link.user_avatar(author) }}
+    {{ link.user_avatar(author,width=48) }}
   </div>
   <div class="media-body">
     <div class="media-heading">