我尝试着去借助SQLAlchemy数据库去实现一个简易的Web用户登录界面,但是在设置好各种环境参数,编写好代码后运行却一直在网页上不可运行,查看之后发现是render_template找不到要渲染的html文件,有人能帮忙解决一下问题吗?
import os #导入各种所需要的包
from flask_sqlalchemy import SQLAlchemy
from flask import Flask,render_template,session,redirect,url_for
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired
app=Flask(__name__) #创建应用实例
bootstrap=Bootstrap(app)
app.config['SECRET_KEY']='hard to guess string' #为网页文件设置CSRF保护机制
basedir=os.path.abspath(os.path.dirname(__file__)) #为数据指定查询目录
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///'+os.path.join(basedir,'user_data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True #设置按键检验
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False #将数据库设定为不可修改类型
db=SQLAlchemy(app) #基于上述代码的属性创建一个数据库实例
#定义User模型
class User(db.Model):
__tablename__='user' #类变量tablename用于定义数据库的表名
id=db.Column(db.Integer,primary_key=True)
username=db.Column(db.String(64),unique=True,index=True) #设定unique函数的目的是使得用户名防止重复
password=db.Column(db.String(64))
def __init__(self,username,password):
self.username=username
self.password=password
def __repr__(self):
return f'<User:{self.username},{self.password}>'
#创建表单
class MyForm(FlaskForm):
name=StringField('用户名:',validators=[DataRequired()]) #文本字段
psw=PasswordField('密码:',validators=[DataRequired()]) #密码字段,函数DataRequired()起到收集数据作用
submit=SubmitField('提交') #表单提交按钮
#编写路由函数
@app.route('/',methods=['GET','POST'])
def index():
all_users=User.query.all() #调用User类内的query实例去指定返回格式为列表
form=MyForm() #调用Myform类
if form.validate_on_submit(): #判断是否点击提交按钮
user=User.query.filter_by(username=form.name.data).first()
if user is None: #若user内为空
user=User(username=form.name.data,password=form.psw.data) #基于Myform类调用属性
db.session.add(user)
db.session.commit()
session['known']=False
else:
session['known']=True
session['name'],session['psw']=form.name.data,form.psw.data
form.name.data,form.psw.data='',''
return redirect(url_for('index')) #向文本文件传递路由和URL
return render_template('sql_index.html', form=form, name=session.get('name'), psw=session.get('psw'),
known=session.get('known', False), all_users=all_users)#使用render_template经行渲染
#主函数部分
if __name__=='__main__':
app.run(debug=False)
{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}用户登录界面{% endblock %}
{% block content %}
<div class="container">
<h1>{% if not (name and psw) %}
请输入用户名和密码!批评!!!
{% elif not known %}
欢迎{{name}}!您的密码为:{{psw}}
{% else %}
欢迎{{name}},很高兴再次见到你!表扬!
{% endif %}
</h1>
</div>
{{wtf.quick_form(form)}}
<hr/>
<div class="container">
<h2>数据表信息:<br/>
{% for user in all_users %}
{{user}}<br/>
{% endfor %}
</h2>
</div>
<% endblock %}
你的模版文件应该放在py的同一目录