cari

Rumah  >  Soal Jawab  >  teks badan

python - Data pertanyaan dengan flask+sqlalchemy

Selepas saya log masuk dan ia dimasukkan ke dalam halaman utama, adakah data di halaman utama akan diterima menggunakan borang? Saya tidak tahu cara meletakkan data yang ditemui pada halaman Adakah terdapat sebarang maklumat yang boleh anda cadangkan atau panduan

怪我咯怪我咯2755 hari yang lalu928

membalas semua(3)saya akan balas

  • 大家讲道理

    大家讲道理2017-05-18 11:01:39

    Saya ingin memaparkan data yang terdapat dari pangkalan data pada halaman Saya ingin tahu sama ada ia dihantar menggunakan borang? Tiada rujukan ditemui

    Saya akan menjawab soalan poster asal berdasarkan ayat ini.

    Izinkan saya meringkaskan idea dahulu: gunakan penghalaan untuk menghantar data yang ditanya oleh SQLAlchemy kepada fungsi render_template melalui parameter, dan kemudian gunakan jinja2 dalam fail .html untuk memaparkan halaman web secara dinamik.

    Sebagai contoh, kini anda mempunyai pangkalan data blog dan anda perlu memaparkan kandungan blog di halaman utama Bagaimana untuk memaparkannya?

    Kaedah utama sebenarnya adalah menggunakan jinja2 untuk melaksanakannya Mula-mula, anggap anda mempunyai pangkalan data Post (sudah ditakrifkan dalam models.py. , jangan cakap awak tak faham! 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.htmlNah anda tidak faham, ia seperti ini:

    <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>
    

    Mengapa anda tidak faham dari mana datangnya import db? Ia datang daripada __init__.py dalam pakej apl! Saya terlalu malas untuk menerangkannya di sini, jadi saya hanya akan menyiarkan kaedah init yang lengkap

    rrreee

    Tetapi sebelum menukar pangkalan data, ingat untuk menjalankan python manager.py shell untuk memindahkan pangkalan data terlebih dahulu (semak sendiri untuk butiran)
    Saya terlalu jauh, mari kita lihat masalah poster asal.

    🎜Mula-mula, mari kita lihat kandungan dalam penghalaan (iaitu, views.py): 🎜 rrreee 🎜Sekarang mari pergi ke index.html untuk melihat cara jinja2 berfungsi Tetapi untuk menjadikan index.html kelihatan semudah mungkin, saya Modul untuk mencetak Siaran dicadangkan secara berasingan dan dipanggil _post.html Untuk menggunakannya dalam index.html, hanya {% sertakan '_posts.html' %. }< /code>Itu sahaja:
    Mari kita lihat _post.html🎜 rrreee 🎜Saya telah membaca sedikit "Flask Web Development: Practical Web Application Development Based on Python" sebelum ini saya akan menyemaknya sedikit hari ini. 🎜 🎜Jawapan penulis semuanya ada dalam buku ini, saya amat mengesyorkan pelajar yang ingin belajar kelalang membaca buku ini! 🎜

    balas
    0
  • PHP中文网

    PHP中文网2017-05-18 11:01:39

    Sebagai contoh, jika anda melawat halaman /index, anda pasti akan mempunyai bahagian belakang dan bahagian hadapan
    untuk memberi anda idea Anda boleh mencari sendiri maklumat yang berkaitan dan menggunakan enjin carian untuk mencari pembangunan kelalang#. 🎜🎜#

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

    balas
    0
  • 为情所困

    为情所困2017-05-18 11:01:39

    Anda menerima parameter, anda boleh menggunakan pembolehubah dalam laluan, atau anda boleh menggunakan arahan request.args.get untuk mendapatkan parameter. Kemudian jalankan atur cara untuk mendapatkan hasilnya Sudah tentu, cara yang paling mudah ialah menyambungkannya ke dalam rentetan dan menggunakan pulangan secara langsung. Sudah tentu, cara yang lebih formal ialah menggunakan render_template dan bekerjasama dengan jinjia2 untuk menghasilkan output templat.

    Mari kita lihat permulaan cepat kelalang. http://docs.jinkan.org/docs/f...

    balas
    0
  • Batalbalas