Django UserCreationForm на домашней странице - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь создать форму создания пользователя на главной странице моего сайта.После прочтения и просмотра руководств по созданию пользователей я заметил, что все создают отдельную HTML-страницу для «регистрации», однако я хочу, чтобы моя страница регистрации была непосредственно на моей домашней странице - это возможно?Мне трудно понять, что у «учетных записей» есть отдельное приложение, а у домашней страницы есть собственное приложение, которое я назвал «игрой».Должны ли оба приложения быть отдельными?Могу ли я сделать приложение учетных записей моим главным приложением для «домашней страницы»?

Кто-нибудь может порекомендовать какие-либо учебники по этому вопросу?Я думаю, что я должен также упомянуть, что я совсем новичок в Джанго.Спасибо.

Приложение для домашней страницы (игра с названием) urls.py:

from django.contrib import admin
from django.urls import path
from.import views

urlpatterns = [


    path('', views.game_start),
]

views.py:

from django.shortcuts import render
from django.contrib.auth.forms import UserCreationForm
from .models import Game

def game_start(request):
    games = Game.objects.all().order_by('date') # grabs all records in game in db table, order by date
    return render (request, 'game/game_start.html', {'games':games})

def signup_view(request):
    form = UserCreationForm()
    return render(request, 'game/game_start.html', {'form': form})

account / urls.py:

from django.conf.urls import url
from .import views

app_name = 'accounts'

urlpatterns = [
    path('', game_views.game_start, name="home"),
]

account / views.py:

from django.http import HttpResponse
from django.shortcuts import render

def about(request):
    # return HttpResponse('Price is right game one')
    return render(request, 'about.html')

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Я хочу, чтобы моя страница регистрации была прямо на моей домашней странице - это возможно?

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

accounts / views.py:

def signup(request):
    data = {'form':None, 'user_created': False}
    if request.method == 'POST':
       form = UserCreationForm(request.POST)
       if form.is_valid():
          user = form.save() 
          # do soemthing with the registered user 
          data['user_created'] = True
    else: 
       form = UserCreationForm() 
    data['form'] = form
    return data   

homepage / views.py:

from accounts.views import signup

def game_start(request):
    games = Game.objects.all().order_by('date') 
    data = {'msg': ''}
    response = signup(request)
    if response['user_created']:
       # you can redirect user here to somewhere else when they have been registered.
       data['msg'] = 'Thanks for being the part of our beautiful community!' 
    return render(request, 'game/game_start.html', {
                'games':games,
                'form': response['form'],
                'msg': data['msg']
    })

game_start.html:

<p>{{msg}}</p>
<form action="/" method="post">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Sign Up</button>
</form>

Должны ли оба приложения быть отдельными?

Ну, вы можете использовать оба приложения в одном приложении, но это не рекомендуется из-заследующие причины:

Если вам сложно понять, что такое приложения в django, то вы можете просто взглянуть на мой ответ здесь

0 голосов
/ 04 февраля 2019

Вы можете включить форму в свой шаблон "game_start.html":

{% if not user.is_authenticated %}

  <form role="form"
         action="{% url 'player_login' %}"
         method="post">
    {% csrf_token %}
    <p>Please login.</p>

    {{ form.as_p }}

    <button type="submit">Sign in</button>
  </form>
  {% endif %}

Предполагается, что у вас есть шаблон именованного URL player_login.

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