2015-09-16 2 views
-1

У меня есть один URL-адрес «mywebsite/home», где у меня есть форма для входа. Я перенаправляю пользователя при входе в другой URL-адрес «mywebsite/users». У меня есть учетные данные для входа в мою базу данных, и предполагается, что они будут использоваться только ограниченным пользователем. Итак, как я могу сделать перенаправление обязательным для просмотра «mywebsite/users»? Я использую django, прямо сейчас любой, кто знает URL, может получить доступ к странице.Сделать перенаправление необходимым для просмотра URL-адреса

мои взгляды следующим образом:

def home(request): 
    usr = request.GET.get('username') 
    pas = request.GET.get('password') 
    userdata = Login.objects.filter(Q(username = usr) | Q(userid = usr)) 
    if Login.objects.filter(Q(username = usr) | Q(userid = usr)).exists(): 
    p = list(userdata.values('password')) 
    b = p[0]['password'] 
     if pas == b: 
      request.session['usr'] = usr 
      return redirect('/users') 

def users(request): 
    return render(request, "ex.html") 
+2

О, дорогая. Надеюсь, вы не пишете свой собственный механизм входа, который хранит пароли как обычный текст. Вы никогда не должны этого делать **. Используйте [систему проверки подлинности Django] (https://docs.djangoproject.com/en/1.8/topics/auth/). –

+0

Который, кстати, имеет декоратор '@ login_required', который намного более разумен, чем полагаться на переадресацию. –

+0

Да, я пытался это сделать, у меня есть логин google на моей домашней странице, хотя для чего у меня нет базы данных –

ответ

0

Поскольку вы используете Google Войти Вы не можете быть в состоянии использовать @login_required decorator.As в соответствии с видом, определенного выше, вы добавляете в сессии ключа 'usr', который я предполагаю, может использоваться, чтобы проверить, имеет ли пользователь действительный логин. Затем вы можете использовать этот обычай декоратора:

def user_login(function): 
    ''' User login decorator''' 
    def wrapper(request, *args, **kw): 
     ''' wrapper ''' 
     if 'usr' not in request.session: 
      return HttpResponseRedirect('/home/') 
     else: 
      return function(request, *args, **kw) 
    return wrapper 

и использовать его в качестве

@user_login 
def users(request): 
    return render(request, "ex.html") 

Убедитесь, что вы удалите ключ из сеанса, когда пользователь выхода из системы

Смежные вопросы