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