За последние 2 часа я пытался выполнить следующее в Django 1.5: Я хочу получить записи из моей базы данных на основе электронной почты пользователя, которая хранится в сеансе. Вот мои идеальные алгоритмы:Использование ClassBasedViews Я хочу получить записи из моей базы данных в Django на основе электронной почты пользователя, которая хранится в сеансе
In my function based view:
1. Attempt Login
2. If account exists, log user in and save email in request.session['email']
In my DetailView:
1.Get the email from the session and save it to a variable; email.
2. Create a queryset to retrieve the account filtering by email
Я реферирован docs и post по этому вопросу, но не могу получить мою голову вокруг него. Я решил использовать метод get для извлечения сеанса, и он работает ... Единственная проблема заключается в том, что я не уверен, как я могу получить доступ к переменной, возвращаемой этим методом. Я посмотрел на this answer, но не счел это слишком полезным. Если этот вопрос существует, то еще, где я хочу его, чтобы удалить его. Благодаря!
#views.py CBV snippet
class AccountDetailView(DetailView):
model = Account
template_name = 'accounts/view_account.html'
queryset = Account.objects.filter(verified=1)
slug_field = 'username'
slug_url_kwarg = 'username'
def get(self, request, *args, **kwargs):
email = request.session['email']
#just to make sure we've accessed the session...print to screen
return HttpResponse(email)
#views.py FBV snippet
def AccountLogin(request):
template_name = 'accounts/login.html'
if request.method == 'POST':
form = AccountLoginForm(request.POST)
if form.is_valid() and form is not None:
clean = form.cleaned_data
try:
#only allow login for verified accounts
account = Account.objects.get(email=clean['email'])
if account and account is not None and account.verified == 1:
#if account exist log user in
user = authenticate(username=clean['email'], password=clean['password'])
#we'll user this later to pull their account info
request.session['email'] = account.email
#logs user in
login(request, user)
Это решение в представлении, основанном на функции ... как реализовать его в представлении на основе классов - это то, о чем я прошу.
def AccountView(request):
account = Account.objects.get(verified=1, email=request.session['email'])
return render(request, 'accounts/view_account.html', {'account': account})
Я оставлю это здесь, если у кого-то есть аналогичный вопрос ... Я закончил с CBV, я просто буду придерживаться FBV. – Staccato