python - Interroger des données avec flask+sqlalchemy
怪我咯
怪我咯 2017-05-18 10:59:39
0
3
935

Une fois connecté et inclus dans la page principale, les données de la page principale seront-elles reçues à l'aide d'un formulaire ? Je ne sais pas comment mettre les données trouvées sur la page. Y a-t-il des informations que vous pouvez recommander ou des conseils

 ?
怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(3)
大家讲道理

Je souhaite afficher les données récupérées de la base de données sur la page. Je veux savoir si elles sont soumises via un formulaire ? Aucune référence trouvée

Je répondrai à la question de l'affiche originale en me basant sur cette phrase.

Laissez-moi d'abord résumer l'idée : utilisez le routage pour transmettre les données interrogées par SQLAlchemy à la fonction render_template via des paramètres, puis utilisez jinja2 pour restituer dynamiquement la page Web dans le fichier .html.

Par exemple, vous disposez désormais d'une base de données de blogs et vous devez afficher le contenu du blog sur la page d'accueil. Comment l'afficher ?

La méthode principale consiste en fait à utiliser jinja2 pour l'implémenter. Tout d'abord, supposons que vous disposez d'une base de données Post (déjà définie dans models.py<.> Ok, ne me dis pas que tu ne comprends pas ) jinja2来实现,首先假设你有一个Post数据库(已经在models.py中定义好了的,别跟我说你不懂!!)

好吧你不懂,就像这样:

from . import db

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text)
    body_html = db.Column(db.Text)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comments = db.relationship('Comment', backref='post', lazy='dynamic')
    
db.event.listen(Post.body, 'set', Post.on_changed_body)

什么你不懂db是哪里import来的?是app包里__init__.py来的呀!这里懒得解释了,直接帖个完整的init方法吧

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_pagedown import PageDown
from config import config

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()
pagedown = PageDown()

login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.login'


def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)
    pagedown.init_app(app)

    if not app.debug and not app.testing and not app.config['SSL_DISABLE']:
        from flask_sslify import SSLify
        sslify = SSLify(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    from .api_1_0 import api as api_1_0_blueprint
    app.register_blueprint(api_1_0_blueprint, url_prefix='/api/v1.0')

    return app

不过更改数据库记得先运行python manager.py shell来迁移一下数据库呀(具体的自己查去)
扯远了,我们来看楼主的问题。

首先来看路由(就是views.py)中的内容:

@main.route('/', methods=['GET', 'POST'])
def index():
    #前面已经假设了你有个Post数据库
    query = Post.query
    #这里使用了pagination,就是自动实现翻页的一个扩展,可用可不用哈
    pagination = query.order_by(Post.timestamp.desc()).paginate(
        page, per_page=current_app.config['FLASKY_POSTS_PER_PAGE'],
        error_out=False)
    #这里才是重点,简单来说就是让posts=Post.query.order_by(Post.timestamp.desc())
    posts = pagination.items
    #然后用render_template传给html,交给jinja2来动态渲染
    return render_template('index.html', form=form, posts=posts,
                           show_followed=show_followed, pagination=pagination)

现在让我们到index.html中来看看jinja2该如何工作,不过为了让index.html看上去尽量简洁,我将打印Post的模块单独提了出来,叫_post.html,在index.html中使用只要{% include '_posts.html' %}即可:
让我们来看_post.html !

Eh bien tu ne comprends pas, c'est comme ça :

<ul class="posts">
    <!--处理从路由传进来的posts,用一个for循环处理,语法酷似python-->
    {% for post in posts %}
    <li class="post">
        <p class="post-thumbnail">
            <a href="{{ url_for('.user', username=post.author.username) }}">
                <img class="img-rounded profile-thumbnail" src="{{ post.author.gravatar(size=40) }}">
            </a>
        </p>
        <p class="post-content">
        
            <!--Post数据在这里显示,你要的答案就在这了。核心思想就是用jinja2 -->
            <p class="post-date">{{ moment(post.timestamp).fromNow() }}</p>
            <p class="post-author"><a href="{{ url_for('.user', username=post.author.username) }}">{{ post.author.username }}</a></p>
            <p class="post-body">
                {% if post.body_html %}
                    {{ post.body_html | safe }}
                {% else %}
                    {{ post.body }}
                {% endif %}
            </p>
        </p>
    </li>
    {% endfor %}
</ul>
Pourquoi ne comprenez-vous pas d'où vient l'importation de la base de données ? Il vient de __init__.py dans le package de l'application ! Je suis trop paresseux pour l'expliquer ici, donc je vais juste poster la méthode d'initialisation complète

rrreee

Mais lors du changement de base de données, n'oubliez pas d'exécuter d'abord le shell python manager.py pour migrer la base de données (vérifiez-le vous-même pour plus de détails)
Pour aller plus loin, regardons le problème de l'affiche originale. #🎜🎜# #🎜🎜#Regardons d'abord le contenu du routage (c'est-à-dire views.py) : #🎜🎜# rrreee #🎜🎜#Maintenant, allons sur index.html pour voir comment jinja2 fonctionne, mais afin que index.html soit aussi beau que possible Pour être concis, j'ai proposé le module d'impression de Post séparément et je l'ai appelé _post.html. Pour l'utiliser dans index.html, il suffit de {% include. '_posts.html' %} :
Jetons un coup d'oeil à _post.html#🎜🎜# rrreee #🎜🎜# J'ai déjà lu un peu de "Développement Web Flask : développement pratique d'applications Web basé sur Python" et je le réviserai un peu aujourd'hui. S'il y a quelque chose qui ne va pas, veuillez le signaler, merci ! #🎜🎜# #🎜🎜#Les réponses de l'auteur sont toutes dans ce livre. Je recommande fortement aux étudiants qui souhaitent apprendre le flacon de lire ce livre ! #🎜🎜#
洪涛

Par exemple, si vous visitez la page /index, vous aurez certainement un backend et un frontend
pour vous fournir des idées. Vous pouvez trouver vous-même des informations pertinentes et utiliser les moteurs de recherche pour rechercher des développements de flacons

.
@app.route('/index')
def index():
    data = "从数据库读取出来的数据"
    html = []
    for item in data:
        html.append(item."列名")
    return ''.join(html)
为情所困

Vous acceptez les paramètres, vous pouvez utiliser des variables dans la route ou vous pouvez utiliser la commande request.args.get pour obtenir les paramètres. Ensuite, exécutez le programme pour obtenir le résultat. Bien sûr, le moyen le plus simple est de le diviser en une chaîne et d'utiliser return directement. Bien sûr, la manière la plus formelle consiste à utiliser render_template et à coopérer avec jinjia2 pour restituer la sortie du modèle.

Jetons un coup d'œil au démarrage rapide du flacon. http://docs.jinkan.org/docs/f...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal