получить форму обновления файла базы данных по нажатию кнопки в колбе - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь создать html-страницу и флеш-маршрут, который откроет форму обновления базы данных, когда я нажимаю кнопку, но до сих пор я получаю только ошибку, сообщающую, что URL-адрес не существует или сервер перегружен. Вот что у меня есть:

Маршрут:

@app.route('/python_forum')
def python_forum():
    conn = sqlite3.connect("/home/Ethankbdca/mysite/python.db")
    c = conn.cursor()
    sql = "SELECT rank, codename, name, actors, description FROM pythonpage Order By rank"
    c.execute(sql)
    pythonforum = []
    for row in c.fetchall():
        tup = (row[0],row[1],row[2],row[3],row[4])
        pythonforum.append(tup)
    conn.close()
    return render_template('pythonforum.html', pythonforum=pythonforum)

@app.route('/addform', methods=['GET', 'POST'])
def addform():
  if request.method == 'GET':
      '''conn = sqlite3.connect("/home/Ethankbdca/mysite/python.db")
      f = conn.cursor()
      sql = "SELECT rank, codename, name, actors, description FROM pythonpage Order By rank"
      f.execute(sql)
      r, c, n, a, d = "", "", "", "", ""
      for row in f.fetchall():
          if int(addpythoncode) == int(row[0]):
              r, c, n, a, d = row[0], row[1], row[2], row[3], row[4]
      conn.close()'''
      return render_template('addpython.html')
  elif request.method == 'POST':
      conn = sqlite3.connect("/home/Ethankbdca/mysite/python.db")
      sql = "Insert into pythonpage ('codename', 'name', 'description') values('" + \
          request.form['name'] + "', "
      sql = sql + "'" + request.form['codename'] + "', "
      sql = sql + "'" + request.form['description'] + "') "
      conn.execute(sql)
      conn.commit()
      return render_template('pythonforum.html')

@app.route('/pythoncode')
def pythoncode():
    conn = sqlite3.connect("/home/Ethankbdca/mysite/python.db")
    c = conn.cursor()
    sql = "SELECT description FROM pythonpage Order By description"
    c.execute(sql)
    pycodeforum = []
    for row in c.fetchall():
        tup = (row[0])
        pycodeforum.append(tup)
    conn.close()
    return render_template('updatepython.html', pycodeforum=pycodeforum)

HTML-код формы "addpythoncode":

<!DOCTYPE html>
<html>
<head>
<link data-require="bootstrap@4.1.3" data-semver="4.1.3" rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" />
<script data-require="bootstrap@4.1.3" data-semver="4.1.3" src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<h1 align='center'>Add Python Code</h1>
<table width="90%">
 <form method="POST">
 <tr>
     <td>Code name</td>
     <td><input type=text name="codename" placeholder="name your code" value='{{c}}' size=40 /></td>
 </tr>
 <tr>
     <td>Name</td>
     <td><input type=text name=name placeholder="enter your name" value='{{n}}' size=50 /></td>
 </tr>
 <tr>
     <td>Description</td>
     <td><textarea name='description' placeholder="enter your code" rows=5 cols=50>{{d}}</textarea></td>
 </tr>
 <tr>
       <tr>
     <td><input type=hidden name=rank value={{r}} /></td>
     <td><input type=submit value='submit' class='btn btn-primary' /></td>
 </tr>
 </form>
 </table><br/>
 &nbsp;&nbsp;<a href='/python_forum'>Back Home</a>
 </body>
 </html>

pythonforum:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"/>
<script src="script.js"></script>
<style>
table {
  border-collapse: collapse;
  width: 100%;
}

th, td {
  padding: 15px;
  text-align: left;
  border-bottom: 3px solid #ddd;
}

</style>
<style>

.button {
  background-color: #1E90FF; /* Blue */
  border: none;
  color: white;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 16px;
  margin: 4px 2px;
  cursor: pointer;
  left: 87%;
  position: fixed;
  top: 80px;

}

.button1 {padding: 10px 24px;}
.button1 {border-radius: 8px;}
</style>

<style type="text/css">
    a.nounderline {text-decoration: none; }
</style>
<style type="text/css">
    a.nounderline {text-decoration: none; }
</style>
</head>
<body>
<h1 align="center">Python Forum</h1>
<br/>
<button type="submit" style="float: right;" class="button button1"><a href="/addform"</>Add code</button>
<table width="90%">
    <br/>
   {% for x in pythonforum:  %}
   <tr>
        <td width=20%><a href='/pythoncode' >{{ x[1] }}</a></td>
        <td width=20%> {{ x[2] }} </td>
   </tr>
   {% endfor %}
</table><br/>
</body>
</html>

То, что он делает, пытается извлечь строку из файла .db, который уже существует, и отредактировать его. Я хочу сделать форму, которая добавит новую строку в файл БД. Я могу понять форму html, но не могу понять, как создать маршрут, который позволит пользователю переходить к форме при нажатии кнопки.

1 Ответ

0 голосов
/ 21 марта 2019

Чтобы добавить новый маршрут для добавления строки в таблицу, вы можете отредактировать свой код или добавить другой маршрут, например:

@app.route('/addform', methods=['GET', 'POST'])
def addform():
  if request.method == 'GET':
      conn = sqlite3.connect("/home/Ethankbdca/mysite/python.db")
      c = conn.cursor()
      sql = "SELECT rank, title, genre, actors, description FROM IMDB Order By rank"
      c.execute(sql)
      r, t, g, a, de = "", "", "", "", ""
      for row in c.fetchall():
          if int(addpythoncode) == int(row[0]):
              r, t, g, a, de = row[0], row[1], row[2], row[3], row[4]
      conn.close()
      return render_template('addpython.html', addpythoncode=addpythoncode, r=r, t=t, g=g, a=a, de=de)
  elif request.method == 'POST':
      conn = sqlite3.connect("/home/Ethankbdca/mysite/python.db")
      sql = "Insert into IMDB (title, director, actors, description) values(" + \
          request.form['genre'] + "', "
      sql = sql + request.form['title'] + ", "
      sql = sql + request.form['director'] + ", "
      sql = sql + request.form['actors'] + ", "
      sql = sql + request.form['description'] + ") "
      conn.execute(sql)
      conn.commit()
      return render_template('pythonforum.html')

Элифовая часть кода отвечает за добавление новой строки встол.Вы не предоставили никакой структуры для базы данных, поэтому я предположил, что структура основана на запросе на обновление.

Вы можете добавить эту функцию в код Python и убедиться, что имеются соответствующие файлы формы шаблона (обычно ониидентичны для обновления форм).Измените ваш HTML-код так, чтобы он нацелился на /addform location.

В качестве примечания: не рекомендуется напрямую использовать sqlite, получать параметры формы и строить запрос без какой-либо обработки, так как это может привести кдо впрыска sql.Попробуйте вместо этого использовать sqlalchemy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...