Бек и бд для регистрационной формы на пайтоне
суть вопроса: есть рег. форма, есть сервер на пайтоне для нее
<form action="/registration" method="post" onsubmit="return validateForm()">
<input type="text" placeholder="Логін" name="логін" required><br><br>
<input type="email" placeholder="Email" name="пошта" id="email" required><br><br>
<input type="password" placeholder="Пароль" name="пароль" id="password" required><br><br>
<input type="password" placeholder="Підтвердіть пароль" name="подтверждение_пароля" id="confirm_password" required><br><br>
<input type="date" name="дата_рождения" required><br><br>
<label>Выберите пол:</label><br>
<input type="radio" name="пол" value="чоловік"> чоловік
<input type="radio" name="пол" value="жінка"> жінка<br><br>
<select name="країна">
<option value="Україна">Україна</option>
<option value="США">США</option>
<!-- Добавьте другие страны по мере необходимости -->
</select><br><br>
<input type="checkbox" name="соглашение" required> Я згоден з умовами<br><br>
<input id="convertButton" type="submit" value="Регистрация">
<button id="convertButton" onclick="location.href='form1.html'">Ще не зареєстровані?</button>
</form>
from flask import Flask, render_template, request, redirect, url_for, flash
from werkzeug.security import generate_password_hash, check_password_hash
import sqlite3
app = Flask(__name__)
app.secret_key = 'your_secret_key' # Замените 'your_secret_key' на свой уникальный ключ
# Создаем базу данных и таблицу при запуске приложения
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
login TEXT NOT NULL,
email TEXT NOT NULL,
password TEXT NOT NULL,
birthdate DATE NOT NULL,
gender TEXT NOT NULL,
country TEXT NOT NULL,
agreement BOOLEAN NOT NULL
)
''')
conn.commit()
conn.close()
@app.route('/регистрация', methods=['POST'])
def registration():
if request.method == 'POST':
login = request.form['логін']
email = request.form['пошта']
password = request.form['пароль']
hashed_password = generate_password_hash(password, method='sha256') # Хэшируем пароль
birthdate = request.form['дата_рождения']
gender = request.form['пол']
country = request.form['країна']
agreement = 'соглашение' in request.form
# Сохраняем данные в базу данных
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO users (login, email, password, birthdate, gender, country, agreement) VALUES (?, ?, ?, ?, ?, ?, ?)",
(login, email, hashed_password, birthdate, gender, country, agreement))
conn.commit()
conn.close()
flash('Регистрация успешна!', 'success')
return redirect(url_for('success'))
@app.route('/вход', methods=['POST'])
def login():
if request.method == 'POST':
login = request.form['логин']
password = request.form['пароль']
# Проверяем логин и пароль в базе данных
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE login=?", (login,))
user = cursor.fetchone()
conn.close()
if user and check_password_hash(user[3], password): # Проверяем пароль
flash('Вход успешен!', 'success')
return redirect(url_for('success'))
else:
flash('Неверный логин или пароль', 'error')
return redirect(url_for('index'))
@app.route('/success')
def success():
return render_template('mainpage.html') # Создайте HTML-файл для страницы успеха
if __name__ == '__main__':
app.run(debug=True)
import http.server
import socketserver
PORT = 8000
class MyRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.path = '/site.html'
return http.server.SimpleHTTPRequestHandler.do_GET(self)
with socketserver.TCPServer(("", PORT), MyRequestHandler) as httpd:
print("Сервер запущен на порту", PORT)
httpd.serve_forever()
не могу понять как записать введенные в форму данные в базу данных
Output:
127.0.0.1 - - [14/Nov/2023 00:14:53] "GET /form.html HTTP/1.1" 304 -
127.0.0.1 - - [14/Nov/2023 00:15:30] code 501, message Unsupported method ('POST')
127.0.0.1 - - [14/Nov/2023 00:15:30] "POST /registration HTTP/1.1" 501 -
Ответы (1 шт):
Проблема с записью данных из формы в базу данных заключается в том, что вы используете отдельный HTTP-сервер (http.server и socketserver) для обслуживания ваших HTML-файлов, но этот сервер не поддерживает POST-запросы. Поэтому вы получаете ошибку 501 при попытке отправить форму.
Используйте встроенный сервер разработки Flask, который поддерживает POST-запросы:
- Удалите импорты
http.server,socketserver, и код, устанавливающий отдельный HTTP-сервер. - Обновите свое приложение Flask, чтобы оно запускалось с помощью встроенного сервера разработки:
if __name__ == '__main__':
app.run(debug=True)
Это запустит сервер разработки Flask, который будет обрабатывать как GET, так и POST-запросы.
Ну а дальше просто убедитесь, что ваша форма отправляет данные на правильный URL, и по маршрутам пройдитесь.