You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.5 KiB

4 months ago
import os
from flask import Flask, render_template, request, session
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__, template_folder='template', static_url_path='/resource', static_folder='resource')
# app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:220113@localhost:3306/woniu?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = os.urandom(24)
db = SQLAlchemy(app)
# 定义404错误页面
@app.errorhandler(404)
def page_not_found(e):
return render_template('error-404.html')
# 定义500错误页面
@app.errorhandler(500)
def server_error(e):
return render_template('error-500.html')
# 定义过滤器,side的长度保持一致
def do_truncate(
str,
length = 100,
end = '...',
):
count = 0
new_str = ''
for c in str:
if count > length: break
new_str += c
if ord(c) <= 255: # 这里认为一个汉字的长度是两个字符,一个其他字母的长度是一个字符
count += 1
else:
count += 2
if count < length: end = ''
return new_str + end
# 注册过滤器
app.jinja_env.filters.update(truncate = do_truncate)
# # 定义全局拦截器,实现自动登录
# @app.before_request
# def before():
# url = request.path
#
# pass_list = ['/user', '/login', '/logout']
# if url in pass_list or url.endswith('.js') or url.endswith('.jpg'):
# pass
#
# elif session.get('islogin') != 'true':
# username = request.cookies.get('username')
# password = request.cookies.get('password')
# if username != None and password != None:
# from module.user import Users
# user = Users()
# result = user.find_by_username(username)
# if len(result) == 1 and result[0].password == password:
# session['islogin'] = 'true'
# session['userid'] = result[0].userid
# session['username'] = username
# session['nickname'] = result[0].nickname
# session['role'] = result[0].role
#
@app.before_request
def before():
url = request.path
pass_list = ['/user', '/login', '/logout']
if url in pass_list or url.endswith('.js') or url.endswith('.jpg'):
pass
elif session.get('islogin') != 'true':
# 检查用户是否已经登录
if session.get('islogin') is not None:
# 如果用户已经登录,则跳过自动登录
pass
else:
# 如果用户没有登录,则尝试从 session 中获取用户登录信息
username = session.get('username')
if username is not None:
# 如果 session 中存在用户名,则尝试自动登录
from module.user import Users
user = Users()
result = user.find_by_username(username)
if len(result) == 1:
# 如果用户存在,则更新 session 信息
session['islogin'] = 'true'
session['userid'] = result[0].userid
session['nickname'] = result[0].nickname
session['role'] = result[0].role
# 全文可以直接使用article_type
@app.context_processor
def gettype():
type={
'1':'情感',
'2':'商业',
'3':'健康',
}
return dict(article_type=type)
# 确保在应用上下文中调用,例如在命令行脚本或测试中
with app.app_context():
db.create_all() # 创建所有数据库表