如何在Python Flask中从HTML选择获取项目
注: 我知道有很多像我一样的问题,但我真的尝试过,但任何方法都有效 我试图让用户在我的端点中获取所选选项,但它不起作用 我试过: 在select html标记上写入属性名称。 在后端,我尝试了这两个选项 type\u user=request.form.get'type\u user'和这个 type\u user=request.form['type\u user'] 我使用debbuger模式,看到auth.py没有收到任何数据,只是没有 register.html 错误: 文件D:\Dev\patterns project\study\u room\auth.py,第15行,在 登记如何在Python Flask中从HTML选择获取项目,python,flask,Python,Flask,注: 我知道有很多像我一样的问题,但我真的尝试过,但任何方法都有效 我试图让用户在我的端点中获取所选选项,但它不起作用 我试过: 在select html标记上写入属性名称。 在后端,我尝试了这两个选项 type\u user=request.form.get'type\u user'和这个 type\u user=request.form['type\u user'] 我使用debbuger模式,看到auth.py没有收到任何数据,只是没有 register.html 错误: 文件D:\Dev
--->type\u user=request.form['type\u user']我正在简化我的答案,以便更清楚 register.html-无需更改。你所拥有的一切都有用 auth.py-需要进行较小的更改。下面添加到代码中的if/else语句: @bp.route'/register',methods='GET',POST' def寄存器: 如果request.method==“POST”: first\u name=请求。表单['first\u name'] last_name=请求。表单['last_name'] 更改部分的开始 如果禁用类型\用户,则下面的行将为无 type\u user=intrequest.form.get'type\u user' 如果在request.form中键入用户: 当前用户必须是管理员,并且可以选择 输入新用户的用户类型,请在此处阅读。 type\u user=request.form[type\u user] 其他: 必须禁用表单中的type_user字段。 这意味着标准用户或匿名者 必须正在注册新用户。所以新用户 必须是标准用户。 类型\用户=1 变更段结束 用户名=请求。表单['username'] 密码=请求。表单['password'] db=get_db 错误=无 打印类型用户 打印名字 如果不是姓和名,请键入用户、用户名和密码: 错误=请填写所有必填字段 elifdb.execute '从用户名为?'的用户中选择id',用户名, .fetchone不是无: 错误='用户{}已注册。'.formatusername 如果错误为无: 执行 '插入到用户的名字、姓氏、类型、用户名、密码值?、?、?、?、?,?', 名字、姓氏、键入用户、用户名、生成密码 db.commit 返回“auth.login”的重定向URL_ 闪光器 返回呈现模板“auth/register.html” 在HTML中使用disabled的问题是,它会使HTML完全不可用。在字典中检查类型_user会处理这种情况,如下所示: 如果在request.form中键入用户: type\u user=request.form[type\u user] 其他: 类型\用户=1 感谢@roganjosh指出了我在关注问题上的最初错误
这里的实现:我删除了disable属性并开始工作。如果有任何具有禁用属性的解决方案,请告诉我。我不确定我是否理解,如果您想在后端获取用户输入,那么禁用下拉列表有什么意义?是的,这是一个下拉标签,但如果没有管理会话,我需要注册一个普通用户。谢谢你的帮助。这不是问题,你还移除了残疾人,这才是真正的问题。你说得对,这没什么区别。根据定义,禁用表示不可用。因此,我认为None是为禁用的select返回的正确值。
#I don't know if it is for the desabled attribute, if the user
#is not logged so he cannot create a admin account only a normal account.
{% if g.user['type'] == 0 %}
<div class="form-group">
<label for="type_user">Type of User <span style="color: red">*</span></label>
<select class="form-control" id="type_user" name="type_user" required>
<option value="0">Admin</option>
<option value="1">User</option>
</select>
</div>
{% else %}
<div class="form-group">
<label for="type_user">Type of User <span style="color: red">*</span></label>
<select class="form-control" id="type_user" name="type_user" required disabled>
<option value="1">User</option>
</select>
</div>
{% endif %}
@bp.route('/register', methods=('GET', 'POST'))
def register():
if request.method == 'POST':
first_name = request.form['first_name']
last_name = request.form['last_name']
type_user = int(request.form.get('type_user'))
username = request.form['username']
password = request.form['password']
db = get_db()
error = None
print(type_user)
print(first_name)
if not (first_name and last_name and type_user and username and password):
error = "Please fill all requiered fields"
elif db.execute(
'SELECT id FROM user WHERE username = ?', (username,)
).fetchone() is not None:
error = 'User {} is already registered.'.format(username)
if error is None:
db.execute(
'INSERT INTO user (first_name, last_name, type, username, password) VALUES (?, ?, ?, ?, ?)',
(first_name, last_name, type_user, username, generate_password_hash(password))
)
db.commit()
return redirect(url_for('auth.login'))
flash(error)
return render_template('auth/register.html')