Форум сайта python.su
Добрый день.
Начал изучать django и появилась проблема.
Хочется подключить авторизацию с заранее заданными логином и паролем. Собственно входить будет через html страничку. Форма описана ниже. Я читал документацию и не совсем понял, что нужно прописать в views и models?
Буду благодарен за помощь!
<div> <div > <h1>Форма авторизации</h1> <form action='.' method='post'> <input type="hidden" name="next" value="{{ next|escape }}" /> <div> <label for="username"> <strong>Логин</strong> </label> <div> <input type="text" name="username" value=""/> </div> </div> <div> <label for="password"> <strong>Пароль</strong> </label> <div> <input type="password" name="password" value=""/> </div> </div> <div> <div> <input type="submit" value="Войти"/> </div> </div> </form> </div> </div>
Офлайн
В доках хорошо описанная глава по этому поводу с пояснительными примерами, в частности раздел Authentication in Web requests, давайте вы внимательно еще раз ее прочитаете. Если с английским не в ладах, то попробуйте найти раздел Аутентификации на djbook.ru.
Офлайн
JOHN_16,
Пока разбираюсь с формами… Уже который день бьюсь… Собственно каким-то образом хочется с шаблона записывать данные игроков в БД…. Но при нажатии кнопки форма сбрасывается и ничего не добавляется…
models
from django.db import models
from django.contrib import admin
import math
# Create your models here.
class MainPage(models.Model):
pass
class Player(models.Model):
""" """
second_name = models.CharField(max_length= 50, verbose_name=u"Фамилия")
first_name = models.CharField(max_length= 30, verbose_name=u"Имя")
base_elo = models.IntegerField(verbose_name=u"ELO")
def full_name(self):
return "%s %s" % (self.second_name, self.first_name)
def __unicode__(self):
return unicode(self.full_name())
from models import MainPage
from models import Player
from annoying.decorators import render_to
from django.shortcuts import render_to_response
from django.contrib.auth.models import User
from django.http import HttpResponse
from django import forms
from chess_core.forms import *
from chess_core.models import *
@render_to("player_list.html")
def player_list(request):
player = Player.objects.all()
return {"player": player}
if request.method == 'POST':
form = PlayerForm(request.POST)
if form.is_vaild():
member = form.save()
member.save()
return HttpResponseRedirect('/player_list/')
return render_to_response('player_list.html', {
'form': form,
})
from django.forms import ModelForm
from chess_core import models
class PlayerForm(ModelForm):
class Meta:
model = Player
<form action="" method="post" >{% csrf_token %}
<div>
<legend>
Добавить игрока:
</legend>
{{ form.PlayerForm }}
</div>
<input type="submit" value="Добавить игрока" class="button_add"/>
</form>
Офлайн
Solidkiller
гадание на кофейной гуще происходит. Вероятно все банально просто: форма не валидна вот вас и выкидывает на ту же самую страницу, а не форма сбрасывается. Смотрте логи,а лучше отладчиком посомтрите как вьюха выполняется
SolidkillerОбщепринятый метод проверки:
if request.method == ‘POST’:
if request.POST
Офлайн
JOHN_16
Отладчик, это что-то вроде pycharm например?
Кстати в предыдущем шаблоне полей для добавления имя фамилии и рейтинга нет… Хотя, как я читал, должны быть…
<form action="" method="post" >{% csrf_token %}
<div>
<legend>
Добавить игрока:
</legend>
{{ form.PlayerForm }}
<input type="text" size="20" /> <small>Фамилия</small><br />
<input type="text" size="20" /> <small>Имя</small><br />
<input type="integer" size="20" /> <small>Рейтинг ELO</small><br />
</div>
<input type="submit" value="Добавить игрока" class="button_add"/>
</form>
C:\Python27\python.exe CProject/wg_chess/chess_core/views.py
Traceback (most recent call last):
File “CProject/wg_chess/chess_core/views.py”, line 2, in <module>
from models import MainPage
File “C:\Project\wg_chess\chess_core\models.py”, line 2, in <module>
from django.db import models
File “C:\Python27\lib\site-packages\django\db\__init__.py”, line 11, in <module>
if DEFAULT_DB_ALIAS not in settings.DATABASES:
File “C:\Python27\lib\site-packages\django\utils\functional.py”, line 184, in inner
self._setup()
File “C:\Python27\lib\site-packages\django\conf\__init__.py”, line 40, in _setup
raise ImportError(“Settings cannot be imported, because environment variable %s is undefined.” % ENVIRONMENT_VARIABLE)
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
Отредактировано Solidkiller (Апрель 11, 2013 01:10:35)
Офлайн
Solidkiller
pyCharm это IDE, отладчик это модуль pdb
import pdb
SolidkillerВы два раза пытаетесь сохранить ? это ритрический вопрос.
member = form.save()
member.save()
def player_list(request): player = Player.objects.all() return {"player": player} if request.POST: form = PlayerForm(request.POST) if form.is_vaild(): print u'Я форма и я валидна' member = form.save() else: print u'Я форма и во мне есть ошибки' return HttpResponseRedirect('/player_list/') return render_to_response('player_list.html', { 'form': form, })
Офлайн
JOHN_16, да это понятно, что вообще нет никакого опыта да и читать именно по django надо что-то…. Я знаю только Django Book на djbook.ru которая написана для древней версии django. Хотя я думаю прочитать эту книгу, а потом наверх полностью всю документацию к 1.4, будет нормально.
Про отлавливания ошибок, я тоже знаю..
Отредактировано Solidkiller (Апрель 11, 2013 10:55:10)
Офлайн
>а потом наверх полностью всю документацию к 1.4, будет нормально
Актуальная версия уже 1.5.1
Офлайн
inoks, ну значит 1.5.1 Может еще что-то есть, что можно почитать?
Офлайн
По джанге могу посоветовать только книжку Beginning Django E-Commerce.
она старая, но суть раскрывается хорошо и много примеров.
Офлайн