beautify
This commit is contained in:
parent
9bd7ffc9ab
commit
810e6a6e60
@ -1,7 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from flask import Flask, render_template, g, redirect, url_for
|
from flask import Flask, render_template, g, redirect, url_for
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
def create_app(test_config=None):
|
def create_app(test_config=None):
|
||||||
# create and configure the app
|
# create and configure the app
|
||||||
@ -44,5 +44,5 @@ def create_app(test_config=None):
|
|||||||
return redirect(url_for("admin.index"))
|
return redirect(url_for("admin.index"))
|
||||||
else:
|
else:
|
||||||
return redirect(url_for("user.home"))
|
return redirect(url_for("user.home"))
|
||||||
return render_template("index.html")
|
return render_template("auth/loginbase.html", cur_time=datetime.now())
|
||||||
return app
|
return app
|
||||||
20
src/admin.py
20
src/admin.py
@ -7,6 +7,7 @@ from werkzeug.security import generate_password_hash
|
|||||||
|
|
||||||
from src.auth import admin_login_required
|
from src.auth import admin_login_required
|
||||||
from src.db import get_db
|
from src.db import get_db
|
||||||
|
from datetime import datetime
|
||||||
import pymysql
|
import pymysql
|
||||||
|
|
||||||
bp = Blueprint('admin', __name__, url_prefix='/admin')
|
bp = Blueprint('admin', __name__, url_prefix='/admin')
|
||||||
@ -26,7 +27,7 @@ def index():
|
|||||||
)
|
)
|
||||||
users = cur.fetchall()
|
users = cur.fetchall()
|
||||||
cur.close()
|
cur.close()
|
||||||
return render_template("admin/index.html", users=users)
|
return render_template("admin/index.html", users=users, cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route('/adduser', methods=("GET", "POST"))
|
@bp.route('/adduser', methods=("GET", "POST"))
|
||||||
@admin_login_required
|
@admin_login_required
|
||||||
@ -41,9 +42,10 @@ def adduser():
|
|||||||
error = '用户空间必须是整数GB'
|
error = '用户空间必须是整数GB'
|
||||||
elif not validateEmail(usermail):
|
elif not validateEmail(usermail):
|
||||||
error = 'email格式不合法'
|
error = 'email格式不合法'
|
||||||
userlimi = float(userlimi)
|
if error is None:
|
||||||
userlimi *= 1024 * 1024 # userlimit is stored and measured by KB
|
userlimi = float(userlimi)
|
||||||
userlimi = int(userlimi)
|
userlimi *= 1024 * 1024 # userlimit is stored and measured by KB
|
||||||
|
userlimi = int(userlimi)
|
||||||
if error is None:
|
if error is None:
|
||||||
db = get_db()
|
db = get_db()
|
||||||
cur = db.cursor()
|
cur = db.cursor()
|
||||||
@ -65,7 +67,7 @@ def adduser():
|
|||||||
if error is None:
|
if error is None:
|
||||||
return redirect(url_for('admin.index'))
|
return redirect(url_for('admin.index'))
|
||||||
flash(error)
|
flash(error)
|
||||||
return render_template("admin/adduser.html")
|
return render_template("admin/adduser.html", cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route('/removeuser', methods=("GET",))
|
@bp.route('/removeuser', methods=("GET",))
|
||||||
@admin_login_required
|
@admin_login_required
|
||||||
@ -92,8 +94,8 @@ def removeuser():
|
|||||||
finally:
|
finally:
|
||||||
cur.close()
|
cur.close()
|
||||||
if error is None:
|
if error is None:
|
||||||
if rowcnt != 0:
|
if rowcnt == 0:
|
||||||
error = "删除uid为%s的用户成功!" % uid_to_del
|
|
||||||
else:
|
|
||||||
error = "由于uid不存在,可能没有被删除,请再次检查删除结果"
|
error = "由于uid不存在,可能没有被删除,请再次检查删除结果"
|
||||||
return render_template("admin/removeuser.html", remove_result=error)
|
else:
|
||||||
|
return redirect(url_for("admin.index"))
|
||||||
|
return render_template("admin/result.html", opname="删除用户出现意外", opresult=error, cur_time=datetime.now())
|
||||||
@ -2,6 +2,7 @@ import functools
|
|||||||
from flask import Blueprint, flash, g, redirect, render_template, request, session, url_for
|
from flask import Blueprint, flash, g, redirect, render_template, request, session, url_for
|
||||||
from werkzeug.security import check_password_hash
|
from werkzeug.security import check_password_hash
|
||||||
from src.db import get_db
|
from src.db import get_db
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
bp = Blueprint('auth', __name__, url_prefix='/auth')
|
bp = Blueprint('auth', __name__, url_prefix='/auth')
|
||||||
|
|
||||||
@ -30,7 +31,7 @@ def loginuser():
|
|||||||
|
|
||||||
flash(error)
|
flash(error)
|
||||||
|
|
||||||
return render_template('auth/loginuser.html')
|
return render_template('auth/loginuser.html', cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route('/loginadmin', methods=('GET', 'POST'))
|
@bp.route('/loginadmin', methods=('GET', 'POST'))
|
||||||
def loginadmin():
|
def loginadmin():
|
||||||
@ -52,11 +53,11 @@ def loginadmin():
|
|||||||
session['user_id'] = 0
|
session['user_id'] = 0
|
||||||
return redirect(url_for('admin.index'))
|
return redirect(url_for('admin.index'))
|
||||||
flash(error)
|
flash(error)
|
||||||
return render_template('auth/loginadmin.html')
|
return render_template('auth/loginadmin.html', cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route('/login', methods=('GET', 'POST'))
|
@bp.route('/login', methods=('GET', 'POST'))
|
||||||
def login():
|
def login():
|
||||||
return render_template("auth/loginbase.html")
|
return render_template("auth/loginbase.html", cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.before_app_request
|
@bp.before_app_request
|
||||||
def load_logged_in_user():
|
def load_logged_in_user():
|
||||||
|
|||||||
@ -1,12 +1,11 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block header %}
|
{% block header %}
|
||||||
<h1>{% block title %}管理主页{% endblock %}</h1>
|
<h2 class="text-center">{% block title %}管理主页{% endblock %}</h2>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>新建用户</h2>
|
<!-- <div>
|
||||||
<div>
|
<form method="post" class="">
|
||||||
<form method="post">
|
|
||||||
<label for="username">用户名</label>
|
<label for="username">用户名</label>
|
||||||
<input name="username" id="username" required> <br>
|
<input name="username" id="username" required> <br>
|
||||||
<label for="usermail">邮箱</label>
|
<label for="usermail">邮箱</label>
|
||||||
@ -17,6 +16,55 @@
|
|||||||
<input name="userlimit" id="userlimit" required>
|
<input name="userlimit" id="userlimit" required>
|
||||||
<input type="submit" value="新建用户">
|
<input type="submit" value="新建用户">
|
||||||
</form>
|
</form>
|
||||||
|
</div> -->
|
||||||
|
<div class="columns " style="padding-top:5em;">
|
||||||
|
<div class="column col-3"></div>
|
||||||
|
<div class="column col-6">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<div class="card-title h4 text-center"> 新建用户</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<form method="post" class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-3 text-center">
|
||||||
|
<label class="form-label" for="username">用户名</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input class="form-input" name="username" id="username" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-3 text-center">
|
||||||
|
<label class="form-label" for="usermail">邮箱</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input class="form-input" name="usermail" id="usermail" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-3 text-center">
|
||||||
|
<label class="form-label" for="password">密码</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input class="form-input" type="password" name="password" id="password" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-3 text-center">
|
||||||
|
<label class="form-label" for="userlimit">用户空间大小</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input class="form-input" name="userlimit" id="userlimit" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input class="input-group-btn btn btn-primary p-centered"type="submit" value="新建用户">
|
||||||
|
<div class="text-right">
|
||||||
|
<a href="/admin/" class="btn">返回</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="/admin/">返回</a>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -1,21 +1,36 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block header %}
|
{% block header %}
|
||||||
<h1>{% block title %}管理主页{% endblock %}</h1>
|
<h2 class="text-center">{% block title %}管理主页{% endblock %}</h2>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>用户列表</h2>
|
|
||||||
<div>
|
<div>
|
||||||
<ul>
|
<span>
|
||||||
{% for user in users%}
|
<h3 class="px-2">用户列表</h3>
|
||||||
<li>
|
</span>
|
||||||
UID:{{ user['user_id'] }}, 用户名: {{ user['user_name'] }},
|
</div>
|
||||||
邮箱: {{ user['user_mail'] }}, 用户空间大小: {{ user['user_limit'] / 1024 / 1024 }}GB
|
<div class="mx-2">
|
||||||
<a href={{"/admin/removeuser?uid=" ~ user['user_id']}}>删除</a>
|
<table class="table">
|
||||||
</li>
|
<thead>
|
||||||
{% endfor %}
|
<tr>
|
||||||
</ul>
|
<th>UID</th> <th>用户名</th> <th>邮箱</th> <th>用户空间</th> <th>操作</th>
|
||||||
<a href="/admin/adduser">新建用户</a>
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for user in users%}
|
||||||
|
<tr>
|
||||||
|
<td>{{ user['user_id'] }}</td>
|
||||||
|
<td>{{ user['user_name'] }}</td>
|
||||||
|
<td>{{ user['user_mail'] }}</td>
|
||||||
|
<td>{{ user['user_limit'] / 1024 / 1024 }}GB</td>
|
||||||
|
<td><a href="/admin/removeuser?uid={{user['user_id']}}" >删除</a></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="text-right p-2">
|
||||||
|
<a href="/admin/adduser" class="btn btn-primary">新建用户</a>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -1,12 +0,0 @@
|
|||||||
{% extends 'base.html' %}
|
|
||||||
|
|
||||||
{% block header %}
|
|
||||||
<h1>{% block title %}管理主页{% endblock %}</h1>
|
|
||||||
{% endblock %}
|
|
||||||
{% block content %}
|
|
||||||
<h2>删除用户结果</h2>
|
|
||||||
<div>
|
|
||||||
{{remove_result}}
|
|
||||||
</div>
|
|
||||||
<a href="/admin/">返回</a>
|
|
||||||
{% endblock %}
|
|
||||||
26
src/templates/admin/result.html
Normal file
26
src/templates/admin/result.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block header %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column col-2 text-center">
|
||||||
|
</div>
|
||||||
|
<div class="column col-9 panel">
|
||||||
|
<div class="panel-header">
|
||||||
|
<div class="panel-title">{{opname}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<p>{{opresult}}</p>
|
||||||
|
{% if ret_url %}
|
||||||
|
<p><a href="{{ret_url}}">返回</a></p>
|
||||||
|
{% else %}
|
||||||
|
<p><a href="javascript:history.back(-1)">返回</a></p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@ -1,14 +1,36 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block header %}
|
|
||||||
<h1>{% block title %}Log In{% endblock %}</h1>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<form method="post">
|
<div class="columns " style="padding-top:5em;">
|
||||||
<label for="username">Admin</label>
|
<div class="column col-3"></div>
|
||||||
<label for="password">密码</label>
|
<div class="column col-6">
|
||||||
<input type="password" name="password" id="password" required>
|
<div class="card">
|
||||||
<input type="submit" value="Log In">
|
<div class="card-header">
|
||||||
</form>
|
<div class="card-title h4 text-center"> 管理员登录</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<form method="post" class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-3 text-center">
|
||||||
|
<label class="form-label" for="username">用户名</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input class="form-input" name="username" id="username" value="admin" disabled>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-3 text-center">
|
||||||
|
<label class="form-label" for="password">密码</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input class="form-input" type="password" name="password" id="password" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input class="input-group-btn btn btn-primary p-centered"type="submit" value="登陆">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -1,12 +1,16 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block header %}
|
{% block header %}
|
||||||
<h1>{% block title %}在访问前,需要登陆{% endblock %}</h1>
|
<h2 class="text-center">{% block title %}在访问前,需要登陆{% endblock %}</h1>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<ul>
|
<div class="text-center">
|
||||||
<li><a href="{{ url_for('auth.loginadmin') }}">管理员登陆</a>
|
<div class="p-1">
|
||||||
<li><a href="{{ url_for('auth.loginuser') }}">用户登陆</a>
|
<a href="{{ url_for('auth.loginadmin') }}" class="btn">管理员登陆</a>
|
||||||
</ul>
|
</div>
|
||||||
|
<div class="p-1">
|
||||||
|
<a href="{{ url_for('auth.loginuser') }}" class="btn">用户登陆</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -1,15 +1,35 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block header %}
|
|
||||||
<h1>{% block title %}Log In{% endblock %}</h1>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<form method="post">
|
<div class="columns " style="padding-top:5em;">
|
||||||
<label for="username">Username</label>
|
<div class="column col-3"></div>
|
||||||
<input name="username" id="username" required>
|
<div class="column col-6">
|
||||||
<label for="password">Password</label>
|
<div class="card">
|
||||||
<input type="password" name="password" id="password" required>
|
<div class="card-header">
|
||||||
<input type="submit" value="Log In">
|
<div class="card-title h4 text-center"> 用户登录</div>
|
||||||
</form>
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<form method="post" class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-3 text-center">
|
||||||
|
<label class="form-label" for="username">用户名</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input class="form-input" name="username" id="username">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-3 text-center">
|
||||||
|
<label class="form-label" for="password">密码</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input class="form-input" type="password" name="password" id="password" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input class="input-group-btn btn btn-primary p-centered"type="submit" value="登陆">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -17,12 +17,18 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</nav> -->
|
</nav> -->
|
||||||
|
<style>
|
||||||
|
html, body{
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<header class="navbar">
|
<header class="navbar">
|
||||||
<section class="navbar-section">
|
<section class="navbar-section">
|
||||||
<h1>电子书管理系统</h1>
|
|
||||||
</section>
|
</section>
|
||||||
<section class="navbar-center">
|
<section class="navbar-center">
|
||||||
<!-- centered logo or brand -->
|
<h1>电子书管理系统</h1>
|
||||||
</section>
|
</section>
|
||||||
<section class="navbar-section">
|
<section class="navbar-section">
|
||||||
{% if g.user %}
|
{% if g.user %}
|
||||||
@ -34,7 +40,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
</header>
|
</header>
|
||||||
<section class="content">
|
<section class="content" style="min-height: 80vh;">
|
||||||
<header>
|
<header>
|
||||||
{% block header %}{% endblock %}
|
{% block header %}{% endblock %}
|
||||||
</header>
|
</header>
|
||||||
@ -42,4 +48,9 @@
|
|||||||
<div class="flash">{{ message }}</div>
|
<div class="flash">{{ message }}</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</section>
|
</section>
|
||||||
|
<footer style="height: 3em;">
|
||||||
|
<div class="text-center">
|
||||||
|
Made with Madness by Catfood <br> Rendered @ {{cur_time}}
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
@ -44,19 +44,19 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column col-3">
|
<div class="column col-2 text-center">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/home">主页</a>
|
<a href="/home"><b>主页</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/search">搜索</a>
|
<a href="/search"><b>搜索</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/addbook">增加</a>
|
<a href="/addbook"><b>增加</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/tags">分类</a>
|
<a href="/tags"><b>分类</b></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -95,9 +95,6 @@
|
|||||||
<input class="btn btn-primary input-group-btn p-centered" type="submit" value="提交">
|
<input class="btn btn-primary input-group-btn p-centered" type="submit" value="提交">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
|
||||||
Rendered @ {{cur_time}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -25,19 +25,19 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column col-3">
|
<div class="column col-2 text-center">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/home">主页</a>
|
<a href="/home"><b>主页</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/search">搜索</a>
|
<a href="/search"><b>搜索</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/addbook">增加</a>
|
<a href="/addbook"><b>增加</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/tags">分类</a>
|
<a href="/tags"><b>分类</b></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -66,9 +66,6 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
|
||||||
Rendered @ {{cur_time}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -16,21 +16,21 @@ function control_modal(op, modal_id){
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column col-3">
|
<div class="column col-2 text-center">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/home">主页</a>
|
<a href="/home"><b>主页</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/search">搜索</a>
|
<a href="/search"><b>搜索</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/addbook">增加</a>
|
<a href="/addbook"><b>增加</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/tags">分类</a>
|
<a href="/tags"><b>分类</b></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="column col-9 panel">
|
<div class="column col-9 panel">
|
||||||
<div class="modal" id="modal-addnote">
|
<div class="modal" id="modal-addnote">
|
||||||
@ -140,9 +140,6 @@ function control_modal(op, modal_id){
|
|||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
|
||||||
Rendered @ {{cur_time}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -25,20 +25,20 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column col-3">
|
<div class="column col-2 text-center">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/home">主页</a>
|
<a href="/home"><b>主页</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/search">搜索</a>
|
<a href="/search"><b>搜索</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/addbook">增加</a>
|
<a href="/addbook"><b>增加</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/tags">分类</a>
|
<a href="/tags"><b>分类</b></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="column col-9 panel">
|
<div class="column col-9 panel">
|
||||||
@ -58,9 +58,6 @@
|
|||||||
<dd> {{user_stat['user_notecount']}}篇</dd>
|
<dd> {{user_stat['user_notecount']}}篇</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
|
||||||
Rendered @ {{cur_time}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -23,19 +23,19 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column col-3">
|
<div class="column col-2 text-center">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/home">主页</a>
|
<a href="/home"><b>主页</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/search">搜索</a>
|
<a href="/search"><b>搜索</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/addbook">增加</a>
|
<a href="/addbook"><b>增加</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/tags">分类</a>
|
<a href="/tags"><b>分类</b></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -51,9 +51,6 @@
|
|||||||
<p><a href="javascript:history.back(-1)">返回</a></p>
|
<p><a href="javascript:history.back(-1)">返回</a></p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
|
||||||
Rendered @ {{cur_time}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -23,19 +23,19 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column col-3">
|
<div class="column col-2 text-center">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/home">主页</a>
|
<a href="/home"><b>主页</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/search">搜索</a>
|
<a href="/search"><b>搜索</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/addbook">增加</a>
|
<a href="/addbook"><b>增加</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/tags">分类</a>
|
<a href="/tags"><b>分类</b></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -124,9 +124,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
|
||||||
Rendered @ {{cur_time}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -25,19 +25,19 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column col-3">
|
<div class="column col-2 text-center">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/home">主页</a>
|
<a href="/home"><b>主页</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/search">搜索</a>
|
<a href="/search"><b>搜索</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/addbook">增加</a>
|
<a href="/addbook"><b>增加</b></a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="/tags">分类</a>
|
<a href="/tags"><b>分类</b></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -76,9 +76,6 @@
|
|||||||
<input class="btn btn-primary input-group-btn p-centered" type="submit" value="提交">
|
<input class="btn btn-primary input-group-btn p-centered" type="submit" value="提交">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-footer">
|
|
||||||
Rendered @ {{cur_time}}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
32
src/user.py
32
src/user.py
@ -6,7 +6,7 @@ import os
|
|||||||
from src.auth import login_required
|
from src.auth import login_required
|
||||||
from src.db import get_db
|
from src.db import get_db
|
||||||
import pymysql
|
import pymysql
|
||||||
import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
bp = Blueprint('user', __name__)
|
bp = Blueprint('user', __name__)
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ def home():
|
|||||||
user_stat = cur.fetchone()
|
user_stat = cur.fetchone()
|
||||||
print(user_stat)
|
print(user_stat)
|
||||||
cur.close()
|
cur.close()
|
||||||
return render_template("user/home.html", user_stat=user_stat, cur_time=datetime.datetime.now())
|
return render_template("user/home.html", user_stat=user_stat, cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route("/addbook", methods=('GET', 'POST'))
|
@bp.route("/addbook", methods=('GET', 'POST'))
|
||||||
@login_required
|
@login_required
|
||||||
@ -86,7 +86,7 @@ def addbook():
|
|||||||
cur.execute("select type_name from typetable")
|
cur.execute("select type_name from typetable")
|
||||||
typelist = cur.fetchall()
|
typelist = cur.fetchall()
|
||||||
return render_template("user/addbook.html", typelist=typelist, error=error,
|
return render_template("user/addbook.html", typelist=typelist, error=error,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route("/tags", methods=('GET', 'POST'))
|
@bp.route("/tags", methods=('GET', 'POST'))
|
||||||
@login_required
|
@login_required
|
||||||
@ -117,7 +117,7 @@ def tags():
|
|||||||
cur.execute("select * from typetable")
|
cur.execute("select * from typetable")
|
||||||
typelist = cur.fetchall()
|
typelist = cur.fetchall()
|
||||||
return render_template("user/addtype.html", typelist=typelist, error=error,
|
return render_template("user/addtype.html", typelist=typelist, error=error,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route("/removetype", methods=("GET",))
|
@bp.route("/removetype", methods=("GET",))
|
||||||
@login_required
|
@login_required
|
||||||
@ -140,10 +140,10 @@ def removetype():
|
|||||||
if rowcnt == 0:
|
if rowcnt == 0:
|
||||||
error = "删除可能失败,再次检查是否完成"
|
error = "删除可能失败,再次检查是否完成"
|
||||||
else:
|
else:
|
||||||
error = "删除(type_id=%s)完成" % tid_to_del
|
return redirect(url_for("user.tags"))
|
||||||
cur.close()
|
cur.close()
|
||||||
return render_template("user/result.html", opname="删除分类",
|
return render_template("user/result.html", opname="删除分类",
|
||||||
opresult=error, cur_time=datetime.datetime.now())
|
opresult=error, cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route("/search", methods=("GET", "POST"))
|
@bp.route("/search", methods=("GET", "POST"))
|
||||||
@login_required
|
@login_required
|
||||||
@ -196,7 +196,7 @@ def search():
|
|||||||
prev_page_link = "/search?bookname=%s&bookattr=%s&page=%s" %(queryval, bookattr, page - 1)
|
prev_page_link = "/search?bookname=%s&bookattr=%s&page=%s" %(queryval, bookattr, page - 1)
|
||||||
# print(prev_page_link, next_page_link)
|
# print(prev_page_link, next_page_link)
|
||||||
return render_template("user/search.html",
|
return render_template("user/search.html",
|
||||||
cur_time=datetime.datetime.now(), error=error, queryresult=queryresult,
|
cur_time=datetime.now(), error=error, queryresult=queryresult,
|
||||||
next_page_link=next_page_link, prev_page_link=prev_page_link,
|
next_page_link=next_page_link, prev_page_link=prev_page_link,
|
||||||
page_last=page_last, page_first=(page==1), queryval=queryval, queryattr=attr_dict)
|
page_last=page_last, page_first=(page==1), queryval=queryval, queryattr=attr_dict)
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ def book(id):
|
|||||||
notes = cur.fetchall()
|
notes = cur.fetchall()
|
||||||
return render_template("/user/book.html",
|
return render_template("/user/book.html",
|
||||||
book=book, booktype=booktype, documents=documents, notes=notes,
|
book=book, booktype=booktype, documents=documents, notes=notes,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route("/book/update/<int:id>/", methods=("GET", "POST"))
|
@bp.route("/book/update/<int:id>/", methods=("GET", "POST"))
|
||||||
@login_required
|
@login_required
|
||||||
@ -294,7 +294,7 @@ def book_update(id):
|
|||||||
booktypestr += k['type_name'] + ';'
|
booktypestr += k['type_name'] + ';'
|
||||||
return render_template("/user/updatebook.html",
|
return render_template("/user/updatebook.html",
|
||||||
book=bookinfo, booktype=booktypestr, typelist=typelist,
|
book=bookinfo, booktype=booktypestr, typelist=typelist,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/doc/upload/<int:id>/", methods=("POST",))
|
@bp.route("/doc/upload/<int:id>/", methods=("POST",))
|
||||||
@ -307,7 +307,7 @@ def doc_upload(id):
|
|||||||
error = None
|
error = None
|
||||||
if fileobj and fileobj.filename:
|
if fileobj and fileobj.filename:
|
||||||
_, filename = os.path.split(fileobj.filename)
|
_, filename = os.path.split(fileobj.filename)
|
||||||
filepath = os.path.join(current_app.config['UPLOADDIR'], filename + f'.{int(datetime.datetime.timestamp(datetime.datetime.now()))}')
|
filepath = os.path.join(current_app.config['UPLOADDIR'], filename + f'.{int(datetime.datetime.timestamp(datetime.now()))}')
|
||||||
fileobj.save(filepath)
|
fileobj.save(filepath)
|
||||||
filesz = os.stat(filepath).st_size // 1024 # original in bytes
|
filesz = os.stat(filepath).st_size // 1024 # original in bytes
|
||||||
filetype = fileobj.mimetype
|
filetype = fileobj.mimetype
|
||||||
@ -336,7 +336,7 @@ def doc_upload(id):
|
|||||||
if error is not None:
|
if error is not None:
|
||||||
return render_template("/user/result.html",
|
return render_template("/user/result.html",
|
||||||
opname="上传文件失败", opresult=error,
|
opname="上传文件失败", opresult=error,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
return redirect(url_for("user.book", id=id))
|
return redirect(url_for("user.book", id=id))
|
||||||
|
|
||||||
@bp.route("/doc/download/<int:docid>/", methods=("GET",))
|
@bp.route("/doc/download/<int:docid>/", methods=("GET",))
|
||||||
@ -358,7 +358,7 @@ def doc_download(docid):
|
|||||||
error = "文件已被删除,严重的数据不一致,请联系管理员"
|
error = "文件已被删除,严重的数据不一致,请联系管理员"
|
||||||
return render_template("/user/result.html",
|
return render_template("/user/result.html",
|
||||||
opname="下载文件失败", opresult=error,
|
opname="下载文件失败", opresult=error,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
|
|
||||||
@bp.route("/doc/delete/<int:docid>/", methods=("GET",))
|
@bp.route("/doc/delete/<int:docid>/", methods=("GET",))
|
||||||
@login_required
|
@login_required
|
||||||
@ -392,11 +392,11 @@ def doc_delete(docid):
|
|||||||
if error is not None:
|
if error is not None:
|
||||||
return render_template("/user/result.html",
|
return render_template("/user/result.html",
|
||||||
opname="删除文件失败", opresult=error,
|
opname="删除文件失败", opresult=error,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
elif warning is not None:
|
elif warning is not None:
|
||||||
return render_template("/user/result.html",
|
return render_template("/user/result.html",
|
||||||
opname="删除文件出现了一些意外", opresult=warning,
|
opname="删除文件出现了一些意外", opresult=warning,
|
||||||
cur_time=datetime.datetime.now(), ret_url=url_for("user.book", id=document['book_id']))
|
cur_time=datetime.now(), ret_url=url_for("user.book", id=document['book_id']))
|
||||||
return redirect(url_for("user.book", id=document['book_id']))
|
return redirect(url_for("user.book", id=document['book_id']))
|
||||||
|
|
||||||
@bp.route("/note/create/<int:bookid>/", methods=("POST",))
|
@bp.route("/note/create/<int:bookid>/", methods=("POST",))
|
||||||
@ -422,7 +422,7 @@ def note_create(bookid):
|
|||||||
if error is not None:
|
if error is not None:
|
||||||
return render_template("/user/result.html",
|
return render_template("/user/result.html",
|
||||||
opname="添加评论失败", opresult=error,
|
opname="添加评论失败", opresult=error,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
|
|
||||||
return redirect(url_for("user.book", id=bookid))
|
return redirect(url_for("user.book", id=bookid))
|
||||||
|
|
||||||
@ -446,5 +446,5 @@ def note_delete(noteid):
|
|||||||
if error is not None:
|
if error is not None:
|
||||||
return render_template("/user/result.html",
|
return render_template("/user/result.html",
|
||||||
opname="删除评论失败", opresult=error,
|
opname="删除评论失败", opresult=error,
|
||||||
cur_time=datetime.datetime.now())
|
cur_time=datetime.now())
|
||||||
return redirect(url_for("user.book", id=note['book_id']))
|
return redirect(url_for("user.book", id=note['book_id']))
|
||||||
Loading…
Reference in New Issue
Block a user