Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 2, 2017 11:57:10

ciklone
Зарегистрирован: 2015-02-20
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

ВСем привет, помогите разобраться. Когда набираю , mysite/registr/ форма открывается и всё работает, но когда захожу на главную страницу и там ссылка на регистрацию выдается ошибка:

Reverse for ‘views.register1’ with arguments ‘()’ and keyword arguments ‘{}’ not found. 0 pattern(s) tried:

вот все тексты:

 def shapka(request):
    return render_to_response("Shapka.html")
	    
def login(request):
    return render_to_response("login.html")
    
def register(request):
    return render_to_response("register.html")
from django.views.generic.edit import FormView
from django.contrib.auth.forms import UserCreationForm
class RegisterFormView(FormView):
    form_class = UserCreationForm
    # Ссылка, на которую будет перенаправляться пользователь в случае успешной регистрации.
    # В данном случае указана ссылка на страницу входа для зарегистрированных пользователей.
    success_url = "/login/"
    # Шаблон, который будет использоваться при отображении представления.
    template_name = "register.html"
    def form_valid(self, form):
        # Создаём пользователя, если данные в форму были введены корректно.
        form.save()
        # Вызываем метод базового класса
        return super(RegisterFormView, self).form_valid(form)    
это views.py

 urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', views.index),
    url(r'^shapka/$', views.shapka),
    url(r'^login/$', views.login),
    url(r'^register/$', views.register),
    url(r'^register1/$', views.RegisterFormView.as_view())
]

 <p class="word"><a href = {% url 'views.register1' %}>Регистрация</a></p>

как то так, если что непонятно - поясню

Офлайн

#2 Июнь 2, 2017 12:06:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

Вы неправильно понимаете реверс. Суть в том, что в шаблонах и в коде вы никогда не должны ссылаться на УРЛ, вы должны получать УРЛ через его имя. Смысл в том, чтобы не менять по проекту урлы, если изменится ТЗ. Вы меняете УРЛ только в urls.py и все.

Вот определение тега

{% url ‘some-url-name’ v1 v2 %}

Как видите, там требуется имя УРЛа, а не имя представления или что-то еще.

 urlpatterns = [
    url(r'^register1/$', views.RegisterFormView.as_view(), name="url_register_1")
]
 <p class="word"><a href = "{% url 'url_register_1' %}">Регистрация</a></p>



Отредактировано FishHook (Июнь 2, 2017 12:07:24)

Офлайн

#3 Июнь 9, 2017 14:24:15

ciklone
Зарегистрирован: 2015-02-20
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

FishHook
Вы неправильно понимаете реверс. Суть в том, что в шаблонах и в коде вы никогда не должны ссылаться на УРЛ, вы должны получать УРЛ через его имя. Смысл в том, чтобы не менять по проекту урлы, если изменится ТЗ. Вы меняете УРЛ только в urls.py и все.Вот определение тега
Спасибо огроммное, помогло. Но теперь вылез другой прикол: использую
 class RegisterFormView(FormView):
    form_class = UserCreationForm
из коробочки. На локальной машине всё ОК, на боеввом серваке пишет “Last_Name” не может быть NULL В чем прикол?

Офлайн

#4 Июнь 10, 2017 10:05:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

Где пишет, кто пишет? Вы же уже не новичок, где трейсбэк ошибки? Где код формы?



Офлайн

#5 Июнь 11, 2017 10:42:53

ciklone
Зарегистрирован: 2015-02-20
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

FishHook
Где пишет, кто пишет? Вы же уже не новичок, где трейсбэк ошибки? Где код формы?
код формы:
 <html lang="ru">
<html>
  <head>
    <title>Регистрация</title>
  </head>
  <body>
    <form action="" method="post">
      {% csrf_token %}
      <!-- as_p для того, чтобы каждый элемент формы был с новой строки -->
      {{ form.as_p }}
      <button type="submit">Зарегистрироваться</button>
    </form>
  </body>
</html>

после нажатия кнопки ЗАРЕГИСТРИРОВАТЬСЯ

IntegrityError at /register/
(1048, “Column ‘last_login’ cannot be null”)
Request Method: POST
Request URL: http://msv.pythonanywhere.com/register/
Django Version: 1.9.1
Exception Type: IntegrityError
Exception Value:
(1048, “Column ‘last_login’ cannot be null”)
Exception Location: /home/msv/.virtualenvs/django18/local/lib/python2.7/site-packages/MySQLdb/connections.py in defaulterrorhandler, line 36
Python Executable: /usr/local/bin/uwsgi
Python Version: 2.7.6

Офлайн

#6 Июнь 11, 2017 11:05:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

ciklone
код формы:



Офлайн

#7 Июнь 11, 2017 11:10:59

ciklone
Зарегистрирован: 2015-02-20
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

FishHook
отож, в литературе пишут, что это поле опциональное. Может джанго 1.9 что то поменялось?

Офлайн

#8 Июнь 11, 2017 13:25:56

ciklone
Зарегистрирован: 2015-02-20
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

FishHook
поддержка на боевом сервере ответила так: This is not pythonanywhere specific error. This is related to UserModel of Django. Please ask this on stackoverflow with more details and with code.

Офлайн

#9 Июнь 12, 2017 08:47:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

ciklone
отож
покажите код формы и код модели!!!



Офлайн

#10 Июнь 12, 2017 09:01:11

ciklone
Зарегистрирован: 2015-02-20
Сообщения: 94
Репутация: +  0  -
Профиль   Отправить e-mail  

регистрация пользователя на сайте

FishHook
Код формы уже показывал, а в файле models.py ничего не писал, потому что всё работает из коробки.

views.py :
 from django.contrib import auth
from django.contrib.auth.forms import UserCreationForm
class RegisterFormView(FormView):
    form_class = UserCreationForm
    success_url = "/login/"
    template_name = "register.html"
    def form_valid(self, form):
        # Создаём пользователя, если данные в форму были введены корректно.
        ##form.last_name = ""
        form.save()
        return super(RegisterFormView, self).form_valid(form)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version