Flask Ошибка типа приложения: __init __ () отсутствует 1 обязательный позиционный аргумент - PullRequest
0 голосов
/ 10 апреля 2020

Я начинаю с Flask и пытаюсь создать простое веб-приложение базы данных.

Отображает 2 html -шаблонов:

  • show_all.html, что показывает данные таблицы базы данных
  • new.html, которая представляет собой форму для вставки данных в таблицу

show_all.html отображается правильно. Когда я нажимаю кнопку подтверждения на new.html, я получаю следующее сообщение об ошибке:

TypeError: __init__() takes 1 positional argument but 2 were given

app.py

from flask import Flask, request, flash, url_for, redirect, render_template
from flask_sqlalchemy import SQLAlchemy
import psycopg2

DB_URL = 'postgresql+psycopg2://{user}:{pw}@{url}/{db}'.format(user='*******',pw='******',url='******',db='*****')

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
db = SQLAlchemy(app)

class test (db.Model):
    __table_args__ = {"schema":"SaubannerDB"}
    id1 = db.Column('id1', db.Integer, primary_key=True)
    name1 = db.Column(db.String(10))

    def __init__(self, name1, id1):
        self.name1 = name1
        self.id1 = id1

@app.route('/')
def show_all():
    return render_template ('show_all.html', tests=test.query.all())

@app.route('/new', methods=['GET','POST'])
def new():
  if request.method == 'POST':
    if not request.form['name1'] or not request.form['id1']:
        flash ('Please enter all fields')
    else:
        name1 = test(request.form['name1'])
        id1 = test(request.form['id1'])
        entry = (name1,id1)

        db.session.add(entry)
        db.session.commit()
        return render_template('new.html')

  return render_template('new.html')

app.run(host = '0.0.0.0', port = 5050)
app.debug = True`

new.html файл выглядит так:

<!DOCTYPE html>
<html>
  <body>
    <form method="post" action="/new">
      <label for="name1"/label><br>
      <input type="text" name="name1" placeholder="name"><br>
      <label for="id1"/label><br>
      <input type="text" name="id1" placeholder="id"><br>
      <input type="submit" value="Submit"><br>
    </form>
  </body>
</html>`

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 10 апреля 2020

Обнаружил это. Следующий код работает, обратите внимание на изменения для переменной «запись»:

from flask import Flask, request, flash, url_for, redirect, render_template
from flask_sqlalchemy import SQLAlchemy
import psycopg2

DB_URL = 'postgresql+psycopg2://{user}:{pw}@{url}/{db}'.format(user='*******',pw='******',url='******',db='*****')


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
db = SQLAlchemy(app)

class test (db.Model):
    __table_args__ = {"schema":"SaubannerDB"}
    id1 = db.Column('id1', db.Integer, primary_key=True)
    name1 = db.Column(db.String(10))

    def __init__(self, name1, id1):
        self.name1 = name1
        self.id1 = id1

@app.route('/')
def show_all():
    return render_template ('show_all.html', tests=test.query.all())

@app.route('/new', methods=['GET','POST'])
def new():
  if request.method == 'POST':
    if not request.form['name1'] or not request.form['id1']:
        flash ('Please enter all fields')
    else:
        entry = test(request.form['id1'],
                      request.form['name1'])

        db.session.add(entry)
        db.session.commit()
        return render_template('new.html')

  return render_template('new.html')

app.run(host = '0.0.0.0', port = 5050)
app.debug = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...