forked from mrlan/EnglishPal
				
			pull admin_service.py
						commit
						6bd9fe9778
					
				| 
						 | 
					@ -0,0 +1,142 @@
 | 
				
			||||||
 | 
					# System Library
 | 
				
			||||||
 | 
					from flask import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Personal library
 | 
				
			||||||
 | 
					from Yaml import yml
 | 
				
			||||||
 | 
					from model.user import *
 | 
				
			||||||
 | 
					from model.article import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ADMIN_NAME = "lanhui"  # unique admin name
 | 
				
			||||||
 | 
					_cur_page = 1  # current article page
 | 
				
			||||||
 | 
					_page_size = 5  # article sizes per page
 | 
				
			||||||
 | 
					adminService = Blueprint("admin_service", __name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def check_is_admin():
 | 
				
			||||||
 | 
					    # 未登录,跳转到未登录界面
 | 
				
			||||||
 | 
					    if not session.get("logged_in"):
 | 
				
			||||||
 | 
					        return render_template("not_login.html")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # 用户名不是admin_name
 | 
				
			||||||
 | 
					    if session.get("username") != ADMIN_NAME:
 | 
				
			||||||
 | 
					        return "You are not admin!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return "pass"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@adminService.route("/admin", methods=["GET"])
 | 
				
			||||||
 | 
					def admin():
 | 
				
			||||||
 | 
					    is_admin = check_is_admin()
 | 
				
			||||||
 | 
					    if is_admin != "pass":
 | 
				
			||||||
 | 
					        return is_admin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return render_template(
 | 
				
			||||||
 | 
					        "admin_index.html", yml=yml, username=session.get("username")
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@adminService.route("/admin/article", methods=["GET", "POST"])
 | 
				
			||||||
 | 
					def article():
 | 
				
			||||||
 | 
					    global _cur_page, _page_size
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    is_admin = check_is_admin()
 | 
				
			||||||
 | 
					    if is_admin != "pass":
 | 
				
			||||||
 | 
					        return is_admin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _article_number = get_number_of_articles()
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        _page_size = min(
 | 
				
			||||||
 | 
					            max(1, int(request.args.get("size", 5))), _article_number
 | 
				
			||||||
 | 
					        )  # 最小的size是1
 | 
				
			||||||
 | 
					        _cur_page = min(
 | 
				
			||||||
 | 
					            max(1, int(request.args.get("page", 1))), _article_number // _page_size + (_article_number % _page_size > 0)
 | 
				
			||||||
 | 
					        )  # 最小的page是1
 | 
				
			||||||
 | 
					    except ValueError:
 | 
				
			||||||
 | 
					        return "page parmas must be int!"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    _articles = get_page_articles(_cur_page, _page_size)
 | 
				
			||||||
 | 
					    for article in _articles:   # 获取每篇文章的title
 | 
				
			||||||
 | 
					        article.title = article.text.split("\n")[0]
 | 
				
			||||||
 | 
					        article.content = '<br/>'.join(article.text.split("\n")[1:])
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    context = {
 | 
				
			||||||
 | 
					        "article_number": _article_number,
 | 
				
			||||||
 | 
					        "text_list": _articles,
 | 
				
			||||||
 | 
					        "page_size": _page_size,
 | 
				
			||||||
 | 
					        "cur_page": _cur_page,
 | 
				
			||||||
 | 
					        "username": session.get("username"),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _update_context():
 | 
				
			||||||
 | 
					        article_len = get_number_of_articles()
 | 
				
			||||||
 | 
					        context["article_number"] = article_len
 | 
				
			||||||
 | 
					        context["text_list"] = get_page_articles(_cur_page, _page_size)
 | 
				
			||||||
 | 
					        _articles = get_page_articles(_cur_page, _page_size)
 | 
				
			||||||
 | 
					        for article in _articles:   # 获取每篇文章的title
 | 
				
			||||||
 | 
					            article.title = article.text.split("\n")[0]
 | 
				
			||||||
 | 
					        context["text_list"] = _articles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if request.method == "GET":
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            delete_id = int(request.args.get("delete_id", 0))
 | 
				
			||||||
 | 
					        except:
 | 
				
			||||||
 | 
					            return "Delete article ID must be int!"
 | 
				
			||||||
 | 
					        if delete_id:  # delete article
 | 
				
			||||||
 | 
					            delete_article_by_id(delete_id)
 | 
				
			||||||
 | 
					            _update_context()
 | 
				
			||||||
 | 
					    elif request.method == "POST":
 | 
				
			||||||
 | 
					        data = request.form
 | 
				
			||||||
 | 
					        content = data.get("content", "")
 | 
				
			||||||
 | 
					        source = data.get("source", "")
 | 
				
			||||||
 | 
					        question = data.get("question", "")
 | 
				
			||||||
 | 
					        level = data.get("level", "4")
 | 
				
			||||||
 | 
					        if content:
 | 
				
			||||||
 | 
					            if level not in ['1', '2', '3', '4']:
 | 
				
			||||||
 | 
					                return "Level must be between 1 and 4."
 | 
				
			||||||
 | 
					            add_article(content, source, level, question)
 | 
				
			||||||
 | 
					            _update_context()
 | 
				
			||||||
 | 
					            title = content.split('\n')[0]
 | 
				
			||||||
 | 
					            flash(f'Article added. Title: {title}')
 | 
				
			||||||
 | 
					    return render_template("admin_manage_article.html", **context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@adminService.route("/admin/user", methods=["GET", "POST"])
 | 
				
			||||||
 | 
					def user():
 | 
				
			||||||
 | 
					    is_admin = check_is_admin()
 | 
				
			||||||
 | 
					    if is_admin != "pass":
 | 
				
			||||||
 | 
					        return is_admin
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    context = {
 | 
				
			||||||
 | 
					        "user_list": get_users(),
 | 
				
			||||||
 | 
					        "username": session.get("username"),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if request.method == "POST":
 | 
				
			||||||
 | 
					        data = request.form
 | 
				
			||||||
 | 
					        username = data.get("username","")
 | 
				
			||||||
 | 
					        new_password = data.get("new_password", "")
 | 
				
			||||||
 | 
					        expiry_time = data.get("expiry_time", "")
 | 
				
			||||||
 | 
					        if username:
 | 
				
			||||||
 | 
					            if new_password:
 | 
				
			||||||
 | 
					                update_password_by_username(username, new_password)
 | 
				
			||||||
 | 
					                flash(f'Password updated to {new_password}')
 | 
				
			||||||
 | 
					            if expiry_time:
 | 
				
			||||||
 | 
					                update_expiry_time_by_username(username, "".join(expiry_time.split("-")))
 | 
				
			||||||
 | 
					                flash(f'Expiry date updated to {expiry_time}.')
 | 
				
			||||||
 | 
					    return render_template("admin_manage_user.html", **context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@adminService.route("/admin/expiry", methods=["GET"])
 | 
				
			||||||
 | 
					def user_expiry_time():
 | 
				
			||||||
 | 
					    is_admin = check_is_admin()
 | 
				
			||||||
 | 
					    if is_admin != "pass":
 | 
				
			||||||
 | 
					        return is_admin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    username = request.args.get("username", "")
 | 
				
			||||||
 | 
					    if not username:
 | 
				
			||||||
 | 
					        return "Username can't be empty."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    user = get_user_by_username(username)
 | 
				
			||||||
 | 
					    if not user:
 | 
				
			||||||
 | 
					        return "User does not exist."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return user.expiry_date
 | 
				
			||||||
		Loading…
	
		Reference in New Issue