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