@app.route('/', methods=['GET','POST']) def index(): name = None form = NameForm() db.create_all() if form.validate_on_submit(): user = User.query.filter_by(username=form.name.data).first() if user is None: user = User(username=form.name.data) db.session.add(user) db.session.commit session['known'] = False if app.config['FLASKY_ADMIN']: send_email(app.config['FLASKY_ADMIN'], 'New User', 'mail/new_user', user=user) else: user = User(username=form.name.data) session['known'] = True session['name'] = form.name.data form.name.data='' return redirect(url_for('index')) send_email(['z_xinzheng@126.com'], 'Warnning', 1 , **kwargs) send_async_email(app, msg) return render_template('index.html', form=form, name=session.get('name'), known=session.get('known', False)) File "C:\Users\DELL\Desktop\flasky\hello.py", line 114, in index if app.config['FLASKY_ADMIN']: KeyError: 'FLASKY_ADMIN' 127.0.0.1 - - [23/May/2023 19:39:40] "POST / HTTP/1.1" 500 -
时间: 2023-12-03 19:42:33 浏览: 54
这个错误看起来是因为在你的 Flask 应用中没有定义 `FLASKY_ADMIN` 配置变量。你可以检查一下你的配置文件或者在应用中定义这个变量。可以在配置文件中加入以下内容:
```
import os
class Config:
# ...
FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
# ...
```
或者在应用中直接定义:
```
app.config['FLASKY_ADMIN'] = 'your_admin_email@example.com'
```
记得将 `'your_admin_email@example.com'` 替换成你的管理员邮箱。这样,就可以通过电子邮件通知管理员了。
相关问题
app.route('/deleteaccount/<int:account_id>', methods=['POST']) @login_required def delete_account(account_id) : authed = session.get('authed') if not authed : return redirect(url_for('login')) form1 = DeleteAccountForm() account = User.query.get_or_404(account_id) if form1.submit.data and form1.validate() : if current_user.id != account.id : abort(401) flash('Usurpation') logout_user() db.session.delete(account) db.session.commit() session.pop('authed') flash('Disposed') else : abort(400) return redirect(url_for('login')) @db.event.listens_for(User, 'after_delete', named=True) def edit_account(**kwargs) : target = kwargs['target'] for username in [target.username] : if username is not None : dis = Photo.query.filter_by(user_name=username).delete() db.session.begin(subtransactions=True) db.session.commit() ,报错信息:TypeError: scoped_session.begin() got an unexpected keyword argument 'subtransactions',修改报错
在你的代码中,`scoped_session` 不支持 `subtransactions` 参数。你可以使用 `session.begin_nested()` 代替 `scoped_session.begin(subtransactions=True)`,以实现嵌套事务。
以下是修改后的代码:
```
@app.route('/deleteaccount/<int:account_id>', methods=['POST'])
@login_required
def delete_account(account_id):
authed = session.get('authed')
if not authed:
return redirect(url_for('login'))
form1 = DeleteAccountForm()
account = User.query.get_or_404(account_id)
if form1.submit.data and form1.validate():
if current_user.id != account.id:
abort(401)
flash('Usurpation')
logout_user()
db.session.delete(account)
db.session.commit()
session.pop('authed')
flash('Disposed')
else:
abort(400)
return redirect(url_for('login'))
@db.event.listens_for(User, 'after_delete', named=True)
def edit_account(**kwargs):
target = kwargs['target']
for username in [target.username]:
if username is not None:
dis = Photo.query.filter_by(user_name=username).delete()
nested = db.session.begin_nested()
nested.commit()
```
写好了登录界面,怎么写后端登录验证,登陆后跳转到index.html我用的是pythonanywhere,怎么将登录验证代码链接到数据库,并且可以注册账号,,给出完整代码
下面是一个示例的完整代码,演示了如何在PythonAnywhere上实现登录验证、注册账号和跳转到index.html页面的功能。
首先,确保已经创建了数据库表格来存储用户账号和密码信息。假设数据库表格名为`users`,包含`id`、`username`和`password`字段。
```python
from flask import Flask, render_template, request, redirect, url_for, session
import mysql.connector
# 创建Flask应用
app = Flask(__name__)
app.secret_key = 'your-secret-key'
# 连接数据库
db = mysql.connector.connect(
host='your-host',
user='your-username',
password='your-password',
database='your-database'
)
cursor = db.cursor()
@app.route('/')
def index():
if 'username' not in session:
return redirect(url_for('login'))
else:
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
# 查询数据库检查用户名和密码是否匹配
query = "SELECT * FROM users WHERE username=%s AND password=%s"
values = (username, password)
cursor.execute(query, values)
user = cursor.fetchone()
if user:
session['username'] = user[1]
return redirect(url_for('index'))
else:
return render_template('login.html', error='用户名或密码错误')
else:
return render_template('login.html')
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
# 检查用户名是否已存在
query = "SELECT * FROM users WHERE username=%s"
values = (username,)
cursor.execute(query, values)
user = cursor.fetchone()
if user:
return render_template('register.html', error='用户名已存在')
else:
# 插入新用户到数据库
query = "INSERT INTO users (username, password) VALUES (%s, %s)"
values = (username, password)
cursor.execute(query, values)
db.commit()
session['username'] = username
return redirect(url_for('index'))
else:
return render_template('register.html')
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('login'))
if __name__ == '__main__':
app.run()
```
请根据你的实际情况修改以下部分:
- 在`db = mysql.connector.connect()`这行代码中,填写你的数据库主机、用户名、密码和数据库名。
- 在`app.secret_key = 'your-secret-key'`这行代码中,填写一个用于加密会话数据的密钥。
同时,确保你的项目文件夹中包含以下模板文件:
- `login.html`:登录界面模板,包含一个表单用于输入用户名和密码。
- `register.html`:注册界面模板,包含一个表单用于输入新用户名和密码。
这样,当你在PythonAnywhere上运行这个应用程序时,它将提供一个完整的登录验证和注册账号功能,并在登录成功后跳转到index.html页面。