代码之家  ›  专栏  ›  技术社区  ›  Franz Biberkopf

Python Flask/Sqlite:如何在post内容中嵌入图像

  •  0
  • Franz Biberkopf  · 技术社区  · 4 年前

    from flask import Flask, render_template, request, redirect, url_for
    from flask_sqlalchemy import SQLAlchemy
    from datetime import datetime
    
    
    
    
     
    app = Flask(__name__)
    
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////Users/admin/Desktop/Blog_Project/blog2.db'
    
    db = SQLAlchemy(app)
    
    class Blogpost2(db.Model):
    
        id = db.Column(db.Integer, primary_key = True)
        title = db.Column(db.String(50))
        subtitle = db.Column(db.String(50))
        author = db.Column(db.String(20))
        date_posted = db.Column(db.DateTime)
        content = db.Column(db.Text)
    
    db.create_all() 
    
    @app.route('/')
    def index():
    
        posts = Blogpost.query.all()
    
        return render_template('index.html', posts = posts)
    
    @app.route('/about')
    def about():
        return render_template('about.html')
        
    
    #@app.route('/post')
    #def post():
        #return render_template('post.html')
    
    @app.route('/post/<int:post_id>')
    def post(post_id):
        post = Blogpost2.query.filter_by(id=post_id).one()
    
        date_posted = post.date_posted.strftime('%d %B, %Y')
    
        return render_template('post.html', post=post, date_posted = date_posted)
    
    
    @app.route('/contact')
    def contact():
        return render_template('contact.html')
    
    
    @app.route('/prova')
    def prova():
        return render_template('prova.html')
    
    
    @app.route('/add')
    def add():
        return render_template('add.html')
    
    @app.route('/addpost', methods=['POST'])
    def addpost():
        
        title = request.form['title']
        subtitle = request.form['subtitle']
        author = request.form["author"]
        content = request.form['content']
    
    
        #return '<h1>Title:{} Subtitle:{} Author:{} Content:{} <h1/>'.format(title, subtitle, author, content)
        post = Blogpost2(title=title, subtitle=subtitle, author=author, content=content, date_posted = datetime.now())
    
    
        db.session.add(post)
        db.session.commit()
        
    
        return redirect(url_for('index'))
    
    
    
    
    if __name__ == "__main__":
        app.run(debug = True)
    
    

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
      <meta name="description" content="">
      <meta name="author" content="">
    
      <title>Clean Blog - Start Bootstrap Theme</title>
    
      <!-- Bootstrap core CSS -->
      <!-- <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> -->
      <link href= "{{ url_for('static', filename='bootstrap.min.css')}}" rel="stylesheet">
    
      <!-- Custom fonts for this template -->
      <!--  <link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">                              -->
      <link href="{{url_for('static', filename = 'fontawesome.min.css')}}" rel="stylesheet" type="text/css">
      <link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
      <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
    
      <!-- Custom styles for this template -->
      <link href="{{url_for('static', filename = 'clean-blog.min.css')}}" rel="stylesheet">
    
    </head>
    
    <body>
    
       <!-- Navigation -->
      <nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
        <div class="container">
          <a class="navbar-brand" href= "{{ url_for('index') }}">Start Bootstrap</a>
          <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
            Menu
            <i class="fas fa-bars"></i>
          </button>
          <div class="collapse navbar-collapse" id="navbarResponsive">
            <ul class="navbar-nav ml-auto">
              <li class="nav-item">
                <a class="nav-link" href="{{ url_for('index')}}">Home</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="{{ url_for('about')}}">About</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="{{ url_for('contact')}}">Contact</a>
              </li>
              
              <li class="nav-item">
                <a class="nav-link" href="{{ url_for('prova')}}">Prova</a>
              </li>
            </ul>
          </div>
        </div>
      </nav>
    
      <!-- Page Header -->
      <header class="masthead" style="background-image: url('img/contact-bg.jpg')">
        <div class="overlay"></div>
        <div class="container">
          <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
              <div class="page-heading">
                <h1>Aggiungi un post </h1>
                <span class="subheading"> </span>
              </div>
            </div>
          </div>
        </div>
      </header>
    
      <!-- Main Content -->
      <div class="container">
        <div class="row">
          <div class="col-lg-8 col-md-10 mx-auto">
            <form name="addForm" id="addForm" method = "POST" action= "{{ url_for('addpost') }}" novalidate>
              <div class="control-group">
                <div class="form-group floating-label-form-group controls">
                  <label>Title</label>
                  <input type="text" class="form-control" placeholder="Title" name = "title" id="title" required data-validation-required-message="Dai un titolo al tuo post">
                  <p class="help-block text-danger"></p>
                </div>
              </div>
              <div class="control-group">
                <div class="form-group floating-label-form-group controls">
                  <label>Subtitle</label>
                  <input type="text" class="form-control" placeholder="Subtitle" name = "subtitle" id="subtitle" required data-validation-required-message="Please enter your email address.">
                  <p class="help-block text-danger"></p>
                </div>
              </div>
              <div class="control-group">
                <div class="form-group col-xs-12 floating-label-form-group controls">
                  <label>Author</label>
                  <input type="text" class="form-control" placeholder="Author" name = "author" id="author" required data-validation-required-message="Please enter your phone number.">
                  <p class="help-block text-danger"></p>
                </div>
              </div>
              <div class="control-group">
                <div class="form-group floating-label-form-group controls">
                  <label>Blog Content</label>
                  <textarea rows="5" class="form-control" placeholder="Blog content" name = "content" id="content" required data-validation-required-message="Please enter a message."></textarea>
                  <p class="help-block text-danger"></p>
                </div>
              </div>
              <br>
              <div id="success"></div>
              <button type="submit" class="btn btn-primary" id="sendMessageButton">Send</button>
            </form>
          </div>
        </div>
      </div>
    
      <hr>
    
      <!-- Footer -->
      <footer>
        <div class="container">
          <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
              <!-- Qua inizia la parte inferiore-->
              <p class="copyright text-muted">Copyright &copy; Your Website 2020</p>
            </div>
          </div>
        </div>
      </footer>
    
              
    
      <!-- Bootstrap core JavaScript -->
      <script src= "{{ url_for('static', filename = 'jquery.min.js')}}"> </script>
      <script src= "{{ url_for('static', filename = 'bootstrap.min.js')}}"></script>
      
    
      <!-- Custom scripts for this template -->
      <script src="{{ url_for('static', filename = 'clean-blog.min.js')}}"> </script>>
    
    </body>
    
    </html>
    

    提前非常感谢您,我们将非常感谢您的每一个建议!

    0 回复  |  直到 4 年前
        1
  •  1
  •   monsieuralfonse64    4 年前

    首先,你需要一种上传图片的方法。您可以通过几种方法来实现这一点;堆栈溢出使用指向托管图像的链接,这些图像使用 src 属性 img 标签。或者你可以让你的用户上传图片。

    一旦您验证了所选的图像(如果它正在上传),您应该将它添加到您的flask静态文件夹中,或者从您提供静态文件的任何地方,并添加一个类似这样的字段到您的 db.Model

    image_path = db.Column(db.String(128)) # swap 128 for something suitable to your path length
    

    图像 标记及其属性 src公司 要像这样从服务器获取图像:

    <h1>{{ blog.author.name }} says: </h1>
    <h2>{{ blog.title }}</h2>
    <p>
        {{ blog.content }}
    </p>
    <img src="{{ blog.image_path }}">