问题描述
推荐会员
我正在创建一个基本的登录页面,但没有数据库设置。将jinja模板传递到html文件时,我不确定自己在做什么错。
.py文件:
from flask import Flask,render_template,flash,session,redirect,url_for
from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField
from wtforms.validators import Datarequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'kmykey'
class SimpleForm(FlaskForm):
username = StringField("Username:",validators=[Datarequired()])
password = StringField("Password:",validators=[Datarequired()])
submit = SubmitField("Submit")
@app.route('/',methods = ['GET','POST'])
def index():
form = SimpleForm()
if form.validate_on_submit():
session['username'] = form.username.data
session['password'] = form.password.data
return redirect(url_for('index'))
return render_template('Login_Page1.html',form=form)
if __name__ == '__main__':
app.run()
html文件:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<Meta charset="utf-8">
<title>Ticket Booking</title>
<link rel="stylesheet" type= "text/css" href=" {{ url_for('static',filename='Login_Page1.css') }}">
<link href="https://fonts.googleapis.com/css2?family=Anton&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- JS,Popper.js,and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</head>
<body>
<div align="center" class="main1">
<form method="POST">
<h1>Railway Booking Portal</h1>
<h2>Welcome!</h2>
<br>
{# This hidden_tag is a CSRF security feature. #}
{{ form.hidden_tag() }}
{{ form.username.label,extra_classes='uname1' }} {{ form.username(placeholder='email here') }}
<br>
{{ form.password.label,extra_classes='passwd1' }} {{ form.password}}
<br>
<a class="abc" href="Sign_Up.html"><u>SignUp</u></a>
<br>
<a class="abc1" href="Password_Reset.html"><u>ForgotPassword</u></a>
<br>
<br>
{{ form.submit() }}
<br>
<p>"One's destination is never a place,but a new way of seeing things." - Henry Miller</p>
</form>
</div>
css文件:
body{
background: url(railway-tracks.jpeg);
background-repeat: no-repeat;
}
h1{
color: black;
}
p{
font-family: 'Anton',sans-serif;
font-size: 200%;
color: black;
}
.uname1{
display: inline-block;
min-width: 90px;
color: red;
}
.passwd1{
display: inline-block;
min-width: 90px;
color: red;
}
.main1{
background-color: rgba(255,255,0.6);
}
.abc{
color: black;
}
.abc1{
color: black;
}
请指导,我做错了什么? 我还尝试通过(也使用class而不是class_)将wtf表单的属性注入html:
{{ form.username.label(class_='uname') }} {{ form.username(placeholder='email here') }}
{{ form.password.label(class_='passwd') }} {{ form.password}}
尽管没有收到错误,并且烧瓶应用程序成功运行,并且页面显示了所有相关的样式/格式,但是标签未格式化。
解决方法
您可以看到answer here
已针对WTForms 2.1更新
您现在可以从WTForms 2.1(2015年12月)开始,通过对字段构造函数使用render_kw =参数来设置呈现关键字。
所以该字段看起来像:
abc = StringField('abc',[InputRequired()],render_kw={"placeholder": "test"})
(旧答案,对于早于WTForms 2.1的版本仍然适用)
WTforms 2.0.x及更低版本中的Python构造函数不支持placeholder。
但是,您可以在模板中轻松地做到这一点:
{{ form.abc(placeholder="test") }}
,
您可以看到answer here 更改代码,我用pycharm看看
{{ form.username.label(extra_classes='uname1') }} {{ form.username(placeholder='email here') }}
<br>
{{ form.password.label(extra_classes='passwd1') }} {{ form.password}}
已针对WTForms 2.1更新
您现在可以从WTForms 2.1(2015年12月)开始使用字段构造函数的render_kw =参数设置渲染关键字。
所以该字段看起来像:
abc = StringField('abc',render_kw={"placeholder": "test"})
(旧答案,对于早于WTForms 2.1的版本仍然适用)
WTforms 2.0.x及更低版本中的Python构造函数不支持placeholder。
但是,您可以在模板中轻松地做到这一点:
{{ form.abc(placeholder="test") }}