Почему данные формы регистрации HTML не принимаются в django
У меня есть следующие конфигурации demo\urls.py, user\urls.py, views.py & HTML Form.
По-прежнему, когда я нажимаю кнопку отправки HTML-формы, она говорит, что файл не найден. Пользуясь помощью ChatGPT, который предоставил два решения, как указано в прикрепленном файле, даже тогда я получаю ошибку. Что делать
demo\urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('user', views.register),
]
user\urls.py
urlpatterns = [
path('register', views.register),
]
views.py
def register(request):
if request.method == 'POST':
name = request.POST.get("name")
email = request.POST.get("email")
password = request.POST.get("password")
created_at = request.POST.get("created_at")
updated_at = request.POST.get("updated_at")
У меня есть следующий код в HTML-форме
<form id="NewUser" method="POST" action="{% url 'register' %}">
{% csrf_token %}
<label for="name">Name:</label><br>
<input name="name" type="text" id="name" name="name"><br>
<label for="email">Email:</label><br>
<input name="email" type="email" id="email" name="email"><br>
<label for="password">Password:</label><br>
<input name="password" type="password" id="password" name="password"><br>
<script>
// Generate current datetime for Hidden fields
var current_datetime = new Date().toISOString();
document.getElementById('current_datetime').value = current_datetime;
</script>
<!-- Hidden fields for created_at and updated_at -->
<input type="hidden" name="created_at" value="{{ current_datetime }}">
<input type="hidden" name="updated_at" value="{{ current_datetime }}">
<button type="submit">Register</button>
</form>
</body>
</html>
Когда я нажимаю кнопку отправки HTML-формы, она говорит, что файл не найден. Что это за ошибка и как ее исправить
Я использовал ChatGPT & его ответ был следующим
Проблема, с которой вы столкнулись, скорее всего, связана с тем, как вы настроили шаблоны URL в Django. Давайте пройдемся по конфигурации и определим проблему:
Конфигурация URL:
У вас есть две различные конфигурации URL:
В demo/urls.py:
urlpatterns = [
path('admin/', admin.site.urls),
path('user', views.register),
]
В user/urls.py:
urlpatterns = [
path('register', views.register),
]
Проблема заключается в том, что шаблон URL в demo/urls.py для представления register перехватывает URL /user, а шаблона для базового URL (/) нет. Поэтому при отправке формы действие указывает на {% url 'register' %}, который разрешается в /user, но форма отправляется в /user/register.
Действие формы:
В вашей HTML-форме атрибут action установлен в {% url 'register' %}, который будет преобразовываться в URL /user из-за конфигурации в demo/urls.py. Однако ваш фактический шаблон URL для представления регистрации - /user/register, как определено в user/urls.py.
Решение:
У вас есть несколько вариантов решения этой проблемы:
Обновите действие формы в HTML-шаблоне, чтобы оно указывало непосредственно на /user/register:
Кроме того, вы можете изменить конфигурацию URL, чтобы она соответствовала структуре вашего приложения:В demo/urls.py:
from django.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('user.urls')), # Include user URLs
]
В user/urls.py:
urlpatterns = [
path('register/', views.register), # Add a trailing slash
]
При такой настройке действие вашей формы в HTML-шаблоне может оставаться в виде {% url 'register' %}, и оно будет правильно преобразовываться в /user/register.
Выбирайте подход, который лучше всего соответствует структуре и предпочтениям вашего приложения. В любом случае убедитесь, что действие формы соответствует шаблону URL, в котором определено представление регистра.
Я попробовал оба предложения, но даже тогда я получаю Error
Not Found: /
[04/Apr/2024 00:42:20] “GET / HTTP/1.1” 404 2162
Not Found: /cart.json
[04/Apr/2024 00:42:20] “GET /cart.json HTTP/1.1” 404 2207
Not Found: /
[04/Apr/2024 00:42:21] “GET / HTTP/1.1” 404 2162
Not Found: /cart.json
[04/Apr/2024 00:42:21] “GET /cart.json HTTP/1.1” 404 2207
[04/Apr/2024 00:42:25] “GET /admin/user/userprofile/ HTTP/1.1” 200 4977
[04/Apr/2024 00:42:25] “GET /admin/jsi18n/ HTTP/1.1” 200 3195
Not Found: /cart.json
[04/Apr/2024 00:42:26] “GET /cart.json HTTP/1.1” 404 2207
Как исправить это, чтобы данные формы отправлялись в django Заранее спасибо
Подозреваю, что вы не отдаете шаблон, и поэтому {% url 'register' %}
не интерполируется, а является значением для action="…"
, и поэтому не отправляет данные на сервер.
Таким образом, вы сохраняете шаблон в каталоге user/templates/user/register.html
(с первым user
- каталог приложения). Шаблон выглядит так:
<!-- user/templates/user/register.html -->
<html>
<body>
<form id="NewUser" method="POST" action="{% url 'register' %}">
{% csrf_token %}
<label for="name">Name:</label><br>
<input name="name" type="text" id="name" name="name"><br>
<label for="email">Email:</label><br>
<input name="email" type="email" id="email" name="email"><br>
<label for="password">Password:</label><br>
<input name="password" type="password" id="password" name="password"><br>
<button type="submit">Register</button>
</form>
</body>
</html>
Теперь зададим имя для register
, функции, например:
# demo/urls.py
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('user.urls')),
]
# user/urls.py
from user.views import register
urlpatterns = [
path('register/', register, name='register'),
]
и в представлении мы отображаем:
# user/views.py
from django.shortcuts import render
def register(request):
if request.method == 'POST':
name = request.POST.get('name')
email = request.POST.get('email')
password = request.POST.get('password')
return render(request, 'user/register.html')
Для того чтобы просмотреть форму, а не только POST, мы посещаем localhost:8000/user/register
(без .html
, а с 8000
в качестве порта).
Это позволит интерполировать шаблон, и таким образом заменить {% url 'register' %}
на /user/register/
.
Приняв помощь от ChatGPT, который предоставил два решения, как указано в прикрепленном файле, даже тогда я получаю ошибку.
Please don't use code you don't understand. That is true for codefragments you find online, but also for code fragments generated by ChatGPT. A paper named "How Secure is Code Generated by ChatGPT?" [arXiv] concluded that ChatGPT is aware of security vulnerabilities in the sense that if you ask about a vulnerability, it can explains the vulnerability, but does not take it into account when writing code. There are some small indications that chatbots like ChatGPT might provide a working example, but therefore that example is often not very good with respect to efficiency, security, architecture, etc.