如何显示 flask_sqlalchemy 中的列内容
How to show the column content in flask_sqlalchemy
我想了解为什么我看不到我在网站中添加的实际 ips,
当我使用
ips = Ip.query.all()
并用 Jinja 注入它我得到以下结果而不是我在表单中输入的实际 ips:
[<Ip 1>, <Ip 2>, <Ip 3>, <Ip 4>, <Ip 5>, <Ip 6>, <Ip 7>, <Ip 8>, <Ip 9>, <Ip 10>, <Ip 11>, <Ip 12>, <Ip 13>, <Ip 14>, <Ip 15>, <Ip 16>, <Ip 17>, <Ip 18>]
我在网上进行了搜索,但没有找到任何有用的信息。
这是我的代码:
app.py
from flask.app import Flask
from mainproject import app, db
from flask import render_template, url_for, abort, redirect, request, flash
from flask_login import login_user, login_required, logout_user
from mainproject.users.forms import LoginForm, SignUpForm, IpBlockForm
from mainproject.model import User, Ip
from werkzeug.security import generate_password_hash, check_password_hash
@app.route('/')
def index():
return render_template('home.html')
@app.route('/welcome')
@login_required
def welcome_user():
return render_template('welcome_user.html')
@app.route('/login', methods = ['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username = form.username.data).first()
if user is not None and user.check_password(form.password.data):
login_user(user)
flash(f'Thank you for login in {form.username.data}!', 'success')
next = request.args.get('next')
if next == None or not next[0]=='/':
next = url_for('welcome_user')
return redirect(next)
return render_template('login.html', form=form)
@app.route('/logout', methods = ['GET', 'POST'])
def logout():
logout_user()
return redirect(url_for('login'))
@app.route('/signup', methods = ['GET', 'POST'])
def signup():
form = SignUpForm()
if form.validate_on_submit():
user = User(username=form.username.data, password = form.password.data)
db.session.add(user)
db.session.commit()
flash(f'Thank you for signing up {form.username.data}!', 'success')
return redirect(url_for('login'))
return render_template('signup.html', form=form)
@app.route('/iplist', methods = ['GET', 'POST'])
@login_required
def iplist():
ips = Ip.query.all()
return render_template('iplist.html', ips=ips)
@app.route('/IPBlock', methods = ['GET', 'POST'])
@login_required
def ipblock():
form = IpBlockForm()
if form.validate_on_submit():
ip = Ip(ip_address=form.ipstoblock.data)
db.session.add(ip)
db.session.commit()
return render_template('IPBlock.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
html
{% extends 'base.html' %}
{%block content%}
<h1>List of blocked IP's</h1>
<form method = "POST">
<div class="container-fluid form-group d-flex justify-content-center m-3">
{{ips}}
</form>
{%endblock%}
</body>
</html>
型号
from mainproject import db, login_manager
from werkzeug.security import generate_password_hash,check_password_hash
from flask_login import UserMixin
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, index=True)
password_hash = db.Column(db.String(128))
def __init__(self, username, password):
self.username = username
self.password_hash = generate_password_hash(password)
def check_password(self,password):
return check_password_hash(self.password_hash, password)
class Ip(db.Model):
__tablename__ = 'ips'
id = db.Column(db.Integer, primary_key=True)
ip_address = db.Column(db.String(14), index=True)
与 Ip.query.all()
你得到数据库中所有行的列表。您可以使用 jinja for 循环并遍历 html.
中的 ips
{% for i in ips %}
{{i.ip_address }}
{% endfor %}
这里 i
是单行数据库,如果你想打印它的 id 那么你将使用 i.id
我想了解为什么我看不到我在网站中添加的实际 ips, 当我使用
ips = Ip.query.all()
并用 Jinja 注入它我得到以下结果而不是我在表单中输入的实际 ips:
[<Ip 1>, <Ip 2>, <Ip 3>, <Ip 4>, <Ip 5>, <Ip 6>, <Ip 7>, <Ip 8>, <Ip 9>, <Ip 10>, <Ip 11>, <Ip 12>, <Ip 13>, <Ip 14>, <Ip 15>, <Ip 16>, <Ip 17>, <Ip 18>]
我在网上进行了搜索,但没有找到任何有用的信息。
这是我的代码:
app.py
from flask.app import Flask
from mainproject import app, db
from flask import render_template, url_for, abort, redirect, request, flash
from flask_login import login_user, login_required, logout_user
from mainproject.users.forms import LoginForm, SignUpForm, IpBlockForm
from mainproject.model import User, Ip
from werkzeug.security import generate_password_hash, check_password_hash
@app.route('/')
def index():
return render_template('home.html')
@app.route('/welcome')
@login_required
def welcome_user():
return render_template('welcome_user.html')
@app.route('/login', methods = ['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username = form.username.data).first()
if user is not None and user.check_password(form.password.data):
login_user(user)
flash(f'Thank you for login in {form.username.data}!', 'success')
next = request.args.get('next')
if next == None or not next[0]=='/':
next = url_for('welcome_user')
return redirect(next)
return render_template('login.html', form=form)
@app.route('/logout', methods = ['GET', 'POST'])
def logout():
logout_user()
return redirect(url_for('login'))
@app.route('/signup', methods = ['GET', 'POST'])
def signup():
form = SignUpForm()
if form.validate_on_submit():
user = User(username=form.username.data, password = form.password.data)
db.session.add(user)
db.session.commit()
flash(f'Thank you for signing up {form.username.data}!', 'success')
return redirect(url_for('login'))
return render_template('signup.html', form=form)
@app.route('/iplist', methods = ['GET', 'POST'])
@login_required
def iplist():
ips = Ip.query.all()
return render_template('iplist.html', ips=ips)
@app.route('/IPBlock', methods = ['GET', 'POST'])
@login_required
def ipblock():
form = IpBlockForm()
if form.validate_on_submit():
ip = Ip(ip_address=form.ipstoblock.data)
db.session.add(ip)
db.session.commit()
return render_template('IPBlock.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
html
{% extends 'base.html' %}
{%block content%}
<h1>List of blocked IP's</h1>
<form method = "POST">
<div class="container-fluid form-group d-flex justify-content-center m-3">
{{ips}}
</form>
{%endblock%}
</body>
</html>
型号
from mainproject import db, login_manager
from werkzeug.security import generate_password_hash,check_password_hash
from flask_login import UserMixin
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, index=True)
password_hash = db.Column(db.String(128))
def __init__(self, username, password):
self.username = username
self.password_hash = generate_password_hash(password)
def check_password(self,password):
return check_password_hash(self.password_hash, password)
class Ip(db.Model):
__tablename__ = 'ips'
id = db.Column(db.Integer, primary_key=True)
ip_address = db.Column(db.String(14), index=True)
与 Ip.query.all()
你得到数据库中所有行的列表。您可以使用 jinja for 循环并遍历 html.
{% for i in ips %}
{{i.ip_address }}
{% endfor %}
这里 i
是单行数据库,如果你想打印它的 id 那么你将使用 i.id