Python 错误的请求浏览器(或代理)发送了此服务器无法理解的请求

Python 错误的请求浏览器(或代理)发送了此服务器无法理解的请求,python,postgresql,flask,Python,Postgresql,Flask,我尝试过填充add.html,当我单击send时,我发现上面的错误。 错误的请求 浏览器或代理发送了此服务器无法理解的请求。 我的app.py如下所示 from flask import Flask, render_template, url_for, redirect, request from flask_sqlalchemy import SQLAlchemy from datetime import datetime import requests app = Flask(__nam

我尝试过填充add.html,当我单击send时,我发现上面的错误。 错误的请求 浏览器或代理发送了此服务器无法理解的请求。 我的app.py如下所示

from flask import Flask, render_template, url_for, redirect, request

from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import requests

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://user:mypassword@localhost/mydb' 

db=SQLAlchemy(app)
# class User(db.Model):
#     id = db.Column(db.Integer, primary_key=True)
#     username = db.Column(db.String(80), unique=True, nullable=False)
#     email = db.Column(db.String(120), unique=True, nullable=False)

#     def __init__(self , username, email):
#         self.username = username
#         self.email = email

#     def __repr__(self):
#         return '<User %r>' % self.username

class Blogpost(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(50))
    date=db.Column(db.DateTime)
    content=db.Column(db.Text)



@app.route('/')
def index():
    return render_template('index.html')


@app.route('/about')
def about():
    return render_template('about.html')


@app.route('/post')
def post():
    return render_template('post.html')


@app.route('/contact')
def contact():
    return render_template('contact.html')

@app.route('/add')
def add():
    return render_template('add.html')

@app.route('/addpost', methods=['POST'])
def addpost():
    if request.method=='POST':

        title = request.form['title']
        subtitle = request.form['subtitle']
        author = request.form['author']
        date = request.form['date']
        content = request.form['content']
        post=Blogpost(title=title, subtitle=subtitle, author=author, date_posted=datetime.now(), content=content)

       db.session.add(post)
       db.session.commit()

    return redirect(url_for('index'))



if __name__ == '__main__':
    app.run(debug=True)


#And below is my is my add.html file
<!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="{{url_for('static', filename='bootstrap.min.css')}}" rel="stylesheet">

    <!-- Custom fonts for this template -->
    <link href="{{url_for('static', filename='font-awesome.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="{{('/')}}">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="fa 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="{{('/')}}">Home</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="{{('/about')}}">About</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="{{('/post')}}">Sample Post</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="{{('/contact')}}">Contact</a>
            </li>
          </ul>
        </div>
      </div>
    </nav>

    <!-- Page Header -->
    <header class="masthead" style="background-image: url('{{url_for('static', filename='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>Create a new blogpost</h1>
              <span class="subheading">You can create a new blogpost here</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" name="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" id="title" name="title" required data-validation-required-message="Please enter a title.">
                <p class="help-block text-danger"></p>
              </div>
            </div>
            <div class="control-group">
              <div class="form-group floating-label-form-group controls">
                <label>Sub-title</label>
                <input type="email" class="form-control" placeholder="subtitle" name="subtitle" id="subtitle" required data-validation-required-message="Please enter your Sub-title.">
                <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="tel" class="form-control" placeholder="author" name="author" id="author" required data-validation-required-message="Your Name.">
                <p class="help-block text-danger"></p>
              </div>
            </div>
              <div class="control-group">
            <div class="control-group">
              <div class="form-group floating-label-form-group controls">
                <label>Post</label>
                <textarea rows="5" class="form-control" placeholder="content" name="content" id="name" required data-validation-required-message="Please enter content."></textarea>
                <p class="help-block text-danger"></p>
              </div>
            </div>
            <br>
            <div id="success"></div>
            <div class="form-group">
              <button type="submit" class="btn btn-primary" id="sendMessageButton">Send</button>
            </div>
          </form>
        </div>
      </div>
    </div>

    <hr>

    <!-- Footer -->
        <footer>
      <div class="container">
        <div class="row">
          <div class="col-lg-8 col-md-10 mx-auto">
            <ul class="list-inline text-center">
            </ul>
            <p class="copyright text-muted">Copyright &copy; Your Website 2017</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.bundle.min.js')}}"></script>

    <!-- Contact Form JavaScript -->
    <script src="{{url_for('static', filename='jqBootstrapValidation.js')}}"></script>
    <script src="{{url_for('static', filename='contact_me.js')}}"></script>



    <!-- Custom scripts for this template -->
    <script src="{{url_for('static', filename='clean-blog.min.js')}}"></script>

  </body>

</html>
当我在填写表单后尝试提交时,会出现以下错误:

错误的请求 浏览器或代理发送了此服务器无法理解的请求


我尝试将其输出到一个文件中,但仍然出现错误

我通过添加

import pdb; pdb.set_trace()
在请求方法检查后立即添加POST。结果是date=request.form['date']指令失败,因为表单上没有日期:

(Pdb) request
<Request 'http://localhost:5000/addpost' [POST]>
(Pdb) request.form
ImmutableMultiDict([('content', u'asdfasdfasdfasdf'), ('title', u'asdfasdf'), ('subtitle', u'adsfasdfasdf'), ('author', u'asdfasdfasdf')])
(Pdb) request.form['title']
u'asdfasdf'
(Pdb) request.form['date']
*** BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.

一旦我删除了date=request.form['date'],错误就会消失。

Perfect,添加datetime.now的正确方法是什么?@daviestoni我宁愿在Blogpost模型中这样做,为blog post date指定一个默认值-因此您不需要指定日期值。您可以类似于这样做:date=db.Columndb.DateTime,default=DateTime.utcnow。这只是一个默认值,必要时可以覆盖它。顺便说一句,我刚刚意识到您使用了post=Blogpost[…]date\u posted=datetime.now[…]但是date\u posted不在您的模型中,所以这不起作用。