我正在建立一个项目,要求用户输入另一个站点的用户名和密码。我的想法是数据将存储在会话中。我不需要将用户名和密码存储在数据库中。
无论如何,当我提示用户输入他们的姓名并通过表格传递时...
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)
...如何在不暴露URL中数据的情况下将其传递到后续视图main:home
中?
编辑:我尝试过类似的操作:
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)
但是我在会话中遇到字典错误,而且我不完全确定这是一个好方法。
答案 0 :(得分:0)
您可以通过Cookies进行加密设置。 或者,如果您要抓取,为什么不登录,然后将duolingo的cookie保存到数据库中,并为duolingo cookie分配唯一的标识符。
例如,您可以创建以下模型表
class DuolingoCookies(models.Model):
uniqueIdentifier = models.CharField(max_length=128)
cookies = models.TextField()
created_at = models.DateTimeField(auto_created=True)
然后将uniquidentifier
分配给唯一的cookie。使用该信息检索并登录duolingo。
让我知道是否有帮助。
有关设置Cookie的信息,请参见reference。当然,您需要改进分配,也可以为DuolingoCookies分配一个user_id,以便只能通过Users ::
进行访问。