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
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() # 创建所有数据库表
|