Просмотр исходного кода

move login and register button to header

honmaple 7 лет назад
Родитель
Сommit
51b62a195a
6 измененных файлов с 85 добавлено и 19 удалено
  1. 1 1
      config.example
  2. 9 3
      forums/common/views.py
  3. 15 5
      forums/extension.py
  4. 7 2
      manager.py
  5. 0 7
      templates/base/base.html
  6. 53 1
      templates/base/header.html

+ 1 - 1
config.example

@@ -6,7 +6,7 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-05-20 12:31:46 (CST)
-# Last Update:星期二 2017-5-16 12:26:59 (CST)
+# Last Update:星期六 2017-6-10 16:9:46 (CST)
 #          By: jianglin
 # Description:
 # **************************************************************************

+ 9 - 3
forums/common/views.py

@@ -6,11 +6,12 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2017-03-13 13:29:37 (CST)
-# Last Update:星期五 2017-4-21 17:54:23 (CST)
+# Last Update:星期五 2017-7-28 11:35:19 (CST)
 #          By:
 # Description:
 # **************************************************************************
-from flask import request, current_app, flash, redirect, url_for
+from flask import (request, current_app, flash, redirect, url_for,
+                   render_template)
 from flask.views import MethodView
 from flask_login import login_required, current_user
 from forums.permission import confirm_permission
@@ -18,7 +19,9 @@ from forums.extension import cache
 
 
 def cache_key():
-    return 'view:{}:{}'.format(request.remote_addr, request.url)
+    if current_user.is_authenticated:
+        return 'view:{}:{}'.format(current_user.id, request.url)
+    return 'view:{}'.format(request.url)
 
 
 def is_confirmed(func):
@@ -50,6 +53,9 @@ class BaseMethodView(MethodView):
     def dispatch_request(self, *args, **kwargs):
         return super(BaseMethodView, self).dispatch_request(*args, **kwargs)
 
+    def render_template(self, template, **kwargs):
+        return render_template(template, **kwargs)
+
 
 class IsAuthMethodView(BaseMethodView):
     decorators = [login_required]

+ 15 - 5
forums/extension.py

@@ -6,12 +6,12 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-10-25 21:57:10 (CST)
-# Last Update:星期五 2017-4-21 17:49:34 (CST)
+# Last Update:星期五 2017-7-28 13:49:33 (CST)
 #          By:
 # Description:
 # **************************************************************************
 from flask import request, g, current_app
-from flask_wtf.csrf import CsrfProtect
+from flask_wtf.csrf import CSRFProtect
 from flask_admin import Admin
 from flask_babelex import Babel, Domain
 from flask_babelex import lazy_gettext as _
@@ -25,10 +25,10 @@ from flask_maple.error import Error
 from flask_maple.captcha import Captcha
 from flask_maple.redis import Redis
 from flask_maple.mail import Mail
-from flask_cache import Cache
 from flask_principal import Principal
 from flask_login import LoginManager
 from flask_msearch import Search
+from flask_cache import Cache
 import os
 
 
@@ -83,8 +83,7 @@ def register_login():
 babel = register_babel()
 db = db
 admin = Admin(name='HonMaple', template_mode='bootstrap3')
-avatar = Avatar()
-csrf = CsrfProtect()
+csrf = CSRFProtect()
 bootstrap = Bootstrap(
     css=('styles/monokai.css', 'styles/mine.css',
          'tags/css/bootstrap-tokenfield.css', 'select2/css/select2.min.css'),
@@ -102,3 +101,14 @@ login_manager = register_login()
 maple_app = App(json=CustomJSONEncoder)
 middleware = Middleware()
 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)
+        return response
+
+
+avatar = AvatarCache()

+ 7 - 2
manager.py

@@ -6,14 +6,14 @@
 # Author: jianglin
 # Email: xiyang0807@gmail.com
 # Created: 2016-10-25 22:08:39 (CST)
-# Last Update:星期五 2017-4-21 17:56:42 (CST)
+# Last Update:星期五 2017-7-28 10:43:51 (CST)
 #          By:
 # Description:
 # **************************************************************************
 from flask_script import Manager
 from flask_migrate import Migrate, MigrateCommand
 from forums import create_app
-from forums.extension import db
+from forums.extension import db,cache
 from forums.api.user.models import User, UserInfo, UserSetting
 from getpass import getpass
 from werkzeug.security import generate_password_hash
@@ -42,6 +42,11 @@ def delete_index():
     from forums.extension import search
     return search.create_index(delete=True)
 
+@manager.command
+def clear_cache():
+    with app.app_context():
+        cache.clear()
+
 
 @manager.command
 def test_index():

+ 0 - 7
templates/base/base.html

@@ -9,10 +9,6 @@
   {{ title }} {{ SITE['title'] }} - {{ _(SITE['description']) }}
 {%- endblock title %}
 
-{% block script -%}
-  {{ super() }}
-{%- endblock script %}
-
 {% block style -%}
   {{ super() }}
   <link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
@@ -38,7 +34,6 @@
         {% endfor %}
       {% endif %}
     {% endwith %}
-    {{ dropdown() }}
     {% block content %}{% endblock %}
   </div>
 {% endblock %}
@@ -69,6 +64,4 @@
     <a href="{{ url_for('auth.register') }}" class="btn btn-sm btn-primary pull-right">{{ _('Register') }}</a>
     <a href="{{ url_for('auth.login') }}" class="btn btn-sm btn-primary pull-right">{{ _('Login') }}</a>
   {% endif %}
-  <a href="{{ url_for('tag.list') }}" class="btn btn-sm btn-primary pull-right">{{ _('TagList') }}</a>
-  <a href="{{ url_for('user.list') }}" class="btn btn-sm btn-primary pull-right">{{ _('UserList') }}</a>
 {%- endmacro %}

+ 53 - 1
templates/base/header.html

@@ -2,6 +2,48 @@
   <li><a href="{{ url }}">{{ title }}</a></li>
 {%- endmacro %}
 
+
+{% macro dropdown() -%}
+  <style>
+   .navbar-right .dropdown-menu {
+       left: 0;
+   }
+   .navbar .nav > li:hover .dropdown-menu {
+       display: block;
+   }
+   .dropdown-menu {
+       min-width: 120px !important;
+   }
+  </style>
+  {% if current_user.is_authenticated %}
+    <li>
+      <a href="{{ url_for('message.list') }}" style="padding:15px 5px;">
+        <i class="fa fa-bell-o"></i>
+        {%- set n = current_user.message_count -%}
+        {%- if n and n != '0' -%}
+          <span class="badge" style="padding:2px 5px;">
+            {{ n }}
+          </span>
+        {%- endif -%}
+      </a>
+    </li>
+    <li class="dropdown">
+      <a class="btn btn-default dropdown-toggle" data-toggle="dropdown" style="border:none;">
+        {{ current_user.username }} <span class="caret"></span>
+      </a>
+      <ul class="dropdown-menu">
+        <li><a href="{{ url_for('user.user',username=current_user.username) }}">{{ _('Home Page') }}</a></li>
+        <li><a href="{{ url_for('setting.setting') }}">{{ _('Setting')}}</a></li>
+        <li role="separator" class="divider"></li>
+        <li><a href="{{ url_for('auth.logout') }}">{{ _('Logout')}}</a></li>
+      </ul>
+    </li>
+  {% else  %}
+    <a class="btn btn-default btn-sm navbar-btn" href="{{ url_for('auth.register') }}">注册</a>
+    <a class="btn btn-default btn-sm navbar-btn" href="{{ url_for('auth.login') }}">登录</a>
+  {% endif %}
+{%- endmacro %}
+
 <nav class="navbar navbar-default navbar-fixed-top" style="background:#fff">
   <div class="container-fluid col-md-offset-1 col-md-10">
     <div class="navbar-header" style="padding-top:5px;">
@@ -13,14 +55,24 @@
         <br/>
         <small style="font-size:10px">{{ _(SITE['description']) }}</small>
       </div>
+      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#collapse-header" aria-expanded="false">
+        <span class="sr-only"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
     </div>
-    <div class="collapse navbar-collapse">
+    <div class="collapse navbar-collapse" id="collapse-header">
       <ul class="nav navbar-nav">
         {{ navlist(url_for('forums.forums'),_('Forums')) }}
         {{ navlist(url_for('docs.list'),_('Wiki')) }}
         {{ navlist('http://honmaple.org',_('Blog')) }}
+        {{ navlist(url_for('tag.list'),_('TagList')) }}
         {{ navlist(url_for('topic.good'),_('Good')) }}
       </ul>
+      <ul class="nav navbar-nav navbar-right" style="margin-left:0px;">
+        {{ dropdown() }}
+      </ul>
       <form action="{{ url_for('search.search') }}" class="navbar-form navbar-right" style="margin-top:10px;" >
         <div class="form-group has-feedback">
           <input class="form-control input-sm" name="keyword" placeholder="搜索内容" type="text" value="">