Ошибка типа: contact () получил неожиданный аргумент ключевого слова ‘name’ при использовании flask

#python #python-3.x #postgresql #flask

#python #python-3.x #postgresql #flask

Вопрос:

Я usig PostgreSQL, и это класс, который я создал,

 class contact(db.Model):
    name = db.Column(db.String(120), nullable=False) 
    email = db.Column(db.String(120), nullable=False)
    phone_no = db.Column(db.String, nullable=False)
    msg = db.Column(db.String(120), nullable=False)
    date = db.Column(db.String(120), nullable=True)
    id = db.Column(db.Integer, primary_key=True)
 

Это функция для добавления записи в базу данных

 @app.route("/contact", methods=['GET', 'POST'])
def contact():
    if (request.method == 'POST'):
        '''Add entry to the database'''
        Name = request.form.get('Name')
        Email = request.form.get('Email')
        Phone = request.form.get('Phone_no')
        Message = request.form.get('Msg')
        entry = contact(name=Name, email=Email, phone_no=Phone, msg=Message, date=datetime.now())
        db.session.add(entry)
        db.session.commit()
    return render_template('contact.html')
 

Это ошибка, которую я получаю

 Traceback (most recent call last):
  File "C:Program FilesPython39Libsite-packagesflaskapp.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:Program FilesPython39Libsite-packagesflaskapp.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "C:Program FilesPython39Libsite-packagesflaskapp.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:Program FilesPython39Libsite-packagesflask_compat.py", line 39, in reraise
    raise value
  File "C:Program FilesPython39Libsite-packagesflaskapp.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:Program FilesPython39Libsite-packagesflaskapp.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:Program FilesPython39Libsite-packagesflaskapp.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:Program FilesPython39Libsite-packagesflask_compat.py", line 39, in reraise
    raise value
  File "C:Program FilesPython39Libsite-packagesflaskapp.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:Program FilesPython39Libsite-packagesflaskapp.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "D:FlaskCode With HarryProject_Blogmain.py", line 37, in contact
    entry = contact(name=Name, email=Email, phone_no=Phone, msg=Message, date=datetime.now())
TypeError: contact() got an unexpected keyword argument 'name'
 

Не знаю, почему это происходит.
Contact.html является:

 <form name="sentMessage" action="/contact" method="POST" id="contactForm" novalidate>
        <div class="control-group">
          <div class="form-group floating-label-form-group controls">
            <label>Name</label>
            <input
              type="text"
              class="form-control"
              placeholder="Name"`enter code here`
              name="Name"
              id="name"
              required
              data-validation-required-message="Please enter your name."
            />
            <p class="help-block text-danger"></p>
          </div>
        </div>
        <div class="control-group">
          <div class="form-group floating-label-form-group controls">
            <label>Email Address</label>
            <input
              type="email"
              class="form-control"
              placeholder="Email Address"
              name="Email"
              id="email"
              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>Phone Number</label>
            <input
              type="tel"
              class="form-control"
              placeholder="Phone Number"
              name="Phone_no"
              id="phone"
              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>Message</label>
            <textarea
              rows="5"
              class="form-control"
              placeholder="Message"
              name="Msg"
              id="message"
              required
              data-validation-required-message="Please enter a message."
            ></textarea>
            <p class="help-block text-danger"></p>
          </div>
        </div>
 

Итак, я хотел знать, почему я получаю эту ошибку, поскольку я новичок, и попытался найти ее самостоятельно, но, к сожалению, я не смог этого сделать

Ответ №1:

Вы используете то же имя «contact» для класса Sqlalchemy:

 class contact(db.Model):
 

и функция просмотра:

 def contact():
 

Интерпретатор Python не может сделать разницу между вашим классом и функцией.
Измените это последнее на (например):

 def contact_view():
 

Это должно решить вашу проблему.