Я работаю над приложением Django.Я хочу создать страницу регистрации для нового пользователя.После того как Django получит отправленную форму и сохранит очищенные данные, я хочу проверить, существует ли уже введенное имя пользователя.если он существует, я хочу, чтобы Sjango снова отобразил страницу с сообщением об ошибке.Он отлично работает, если имя пользователя еще не существует.
Однако, когда имя пользователя существует, я получаю следующую ошибку:
ValueError at /signup/
The view users.views.user_signup didn't return an HttpResponse object. It returned None instead.
Request Method: POST
Request URL: http://127.0.0.1:8000/signup/
Django Version: 2.0.5
Exception Type: ValueError
Exception Value:
The view users.views.user_signup didn't return an HttpResponse object. It returned None instead.
Exception Location: /Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response, line 139
Python Executable: /Users/omarjandali/anaconda3/envs/MySplit/bin/python
Python Version: 3.6.2
Python Path:
['/Users/omarjandali/Desktop/demo/mysplit',
'/Users/omarjandali/anaconda3/envs/MySplit/lib/python36.zip',
'/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6',
'/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/lib-dynload',
'/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/site-packages']
Странная вещь, которую я сейчас вижу, состоит в том, что у меня есть оператор print, который будет отображать результатызапрос, который я написал, чтобы проверить имя пользователя и если оно существует в базе данных.Когда форма отправляется, она выдает ошибку, и в трассировке моего терминала она не печатает оператор.
Я ввожу существующее имя пользователя.Следует сделать запрос и распечатать результаты.
Вот мой код:
def user_signup(request):
if request.method == "POST":
form = SignupForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
email = cd['email']
username = cd['username']
password = cd['password']
user_taken = User.objects.filter(username = username).first()
** print(user_taken)
if user_taken == None:
print('username is good')
secure_password = make_password(password)
user = User.objects.create(
username = username,
email = email,
password = secure_password
)
login(request, user)
return redirect('user_profile')
else:
print('username is taken')
form = SignupForm()
error = "Username is already taken"
parameters = {
'form':form,
'error':error
}
return render(request, 'users/signup.html', parameters)
else:
form = SignupForm
parameters = {
'form':form
}
return render(request, 'users/signup.html', parameters)
Я поставил ** там, где должно быть напечатано выражение print:
Вот что я получаю в своем терминале:
[23/May/2018 08:39:27] "POST /signup/ HTTP/1.1" 302 0
[23/May/2018 08:39:27] "GET /profile/ HTTP/1.1" 200 960
[23/May/2018 08:39:31] "GET /logout HTTP/1.1" 301 0
[23/May/2018 08:39:32] "GET /logout/ HTTP/1.1" 302 0
[23/May/2018 08:39:32] "GET /login/ HTTP/1.1" 200 516
[23/May/2018 08:39:32] "GET /logout HTTP/1.1" 301 0
[23/May/2018 08:39:32] "GET /logout/ HTTP/1.1" 302 0
[23/May/2018 08:39:32] "GET /login/?next=/logout/ HTTP/1.1" 200 516
[23/May/2018 08:39:34] "GET /signup/ HTTP/1.1" 200 609
Internal Server Error: /signup/
Traceback (most recent call last):
File "/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/site-packages/django/core/handlers/base.py", line 139, in _get_response
"returned None instead." % (callback.__module__, view_name)
ValueError: The view users.views.user_signup didn't return an HttpResponse object. It returned None instead.
[23/May/2018 08:39:47] "POST /signup/ HTTP/1.1" 500 54487
Это даже не печать ожидаемых результатов запроса.Может ли кто-нибудь помочь мне с этим.