95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
from flask import Blueprint, render_template, current_app, request, flash, redirect, url_for
|
||
from flask_login import login_required, current_user, login_manager
|
||
from .models import User, Conversation
|
||
from . import db
|
||
import openai
|
||
|
||
main = Blueprint('main', __name__)
|
||
|
||
|
||
@main.route('/')
|
||
def index():
|
||
return render_template('index.html', user=current_user)
|
||
|
||
|
||
@main.route('/profile')
|
||
@login_required
|
||
def profile():
|
||
if current_user.role == "admin":
|
||
return render_template('profile.html', user=current_user, accounts=User.query.all())
|
||
return render_template('profile.html', user=current_user)
|
||
|
||
|
||
@main.route('/manage')
|
||
@login_required
|
||
def manage():
|
||
if current_user.role == "admin":
|
||
accountid = request.args.get('id')
|
||
if accountid:
|
||
accounts = User.query.filter_by(id=accountid)
|
||
else:
|
||
accounts = User.query
|
||
if accounts:
|
||
return render_template('manage.html', user=current_user, accounts=accounts)
|
||
else:
|
||
flash("无此用户id!")
|
||
return redirect(request.referrer if request.referrer else url_for('main.index'))
|
||
|
||
flash("您无权管理其他账户")
|
||
return redirect(url_for('main.index'))
|
||
|
||
|
||
@main.route('/chat')
|
||
@login_required
|
||
def chat():
|
||
if current_user.isActivated:
|
||
return render_template('chat.html', user=current_user)
|
||
else:
|
||
flash("您的账户暂未被激活")
|
||
return redirect(url_for('main.index'))
|
||
return redirect(url_for('main.index'))
|
||
|
||
|
||
@main.route('/chat', methods=['POST'])
|
||
@login_required
|
||
def chat_post():
|
||
openai.api_key = current_app.config['OPENAI_API_KEY']
|
||
openai.proxy = current_app.config['NETWORK_PROXY']
|
||
|
||
msg = request.form.get("msg")
|
||
|
||
new_conversation = Conversation(userid=current_user.id,
|
||
useremail=current_user.email,
|
||
username=current_user.name,
|
||
request=msg,
|
||
response="")
|
||
db.session.add(new_conversation)
|
||
db.session.commit()
|
||
|
||
if current_user.is_authenticated and current_user.isActivated:
|
||
openai_resp = openai.ChatCompletion.create(
|
||
model=current_app.config['OPENAI_MODEL_NAME'],
|
||
messages=[
|
||
{"role": "system",
|
||
"content": current_app.config['OPENAI_PROMPT']},
|
||
{"role": "user", "content": msg}
|
||
]
|
||
)
|
||
msg_resp = openai_resp['choices'][0]['message']['content']
|
||
if msg_resp:
|
||
response = {"message": msg_resp, "status": "success"}
|
||
else:
|
||
response = {"message": "请求错误", "status": "success"}
|
||
else:
|
||
response = {"message": "请先登录/激活", "status": "fail"}
|
||
|
||
new_conversation = Conversation(userid=current_user.id,
|
||
useremail=current_user.email,
|
||
username=current_user.name,
|
||
request=msg,
|
||
response=msg_resp)
|
||
db.session.add(new_conversation)
|
||
db.session.commit()
|
||
|
||
return response
|