Передача значений формы POST из одного представления в другое без включения URL - PullRequest
0 голосов
/ 23 февраля 2019

Я создаю проект, который запрашивает у пользователя имя пользователя и пароль для другого сайта.Я думаю, что данные будут храниться в сессиях.Мне не нужно хранить имя пользователя и пароль в базе данных.

В любом случае, когда я запрашиваю у пользователя его имя и передаю форму ...

urls.py

from django.urls import path

from . import views

app_name = 'main'

urlpatterns = [
    path('', views.enteruser, name='enteruser'),
    path('success/', views.success, name='success'),
    path('<str:username>/', views.home, name='home'),
]

views.py

def enteruser(request):
if request.method == 'POST':
    form = EnterUserForm(request.POST)
    username = request.POST['username']
    password = request.POST['password']
    if form.is_valid():
        username = form.cleaned_data['username']
        password = form.cleaned_data['password']
        request.session['username'] = username
        request.session['password'] = password
        form.save()
    return redirect('main:home', username=username, password=password)
else:
    if request.session.session_key:
        username = request.session['username']
        password = request.session['password']
        return redirect('main:home', username=username, password=password)
    else:
        form = EnterUserForm()
        return render(request, 'main/enteruser.html', {'form': form})

forms.py

class EnterUserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)
    class Meta:
        model = DuolingoUsers
        fields = ['username', 'password']
        labels = {
            'username': 'Enter Duolingo Username:',
            'password': 'Enter Duolingo Password:',
        }

models.py

class DuolingoUsers(models.Model):
    username = models.CharField(max_length=100, unique=True)
    last_update = models.DateField(blank=True, null=True)
    last_inquiry = models.DateField(auto_now=True)

... как я могу передать его в последующее представление main:home, не раскрывая данные в URL?

Редактировать: я пробовал что-то вроде:

def home(request, username=None, password=None):
    template_name = 'main/index.html'
    if username is None or password is None:
        if request.session.session_key:
            username = request.session.get('username', None)
            password = request.session.get('password', None)

Но я получаю ошибку словаря на сессиях, и я не совсем уверен, что это хороший способ сделать это.

1 Ответ

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

Вы можете настроить его с помощью файлов cookie с шифрованием.Или, если вы очищаетесь, почему бы вам не войти в систему, а затем сохранить файлы cookie из duolingo в базу данных и назначить уникальный идентификатор для файлов cookie duolingo.

Например, в таблице вы можете создать следующую модель

class DuolingoCookies(models.Model):
    uniqueIdentifier = models.CharField(max_length=128)
    cookies = models.TextField()
    created_at = models.DateTimeField(auto_created=True)

Затем присвойте uniquidentifier уникальному файлу cookie.Используйте эту информацию, чтобы получить и войти в Duolingo.Дайте мне знать, если это поможет.

См. Ссылку о настройке файлов cookie.Конечно, вам нужно улучшить назначение, вы также можете назначить DuolingoCookies с user_id, чтобы к нему можно было получить доступ только через Users ::

...