简体   繁体   English

如何让用户登录django

[英]How to keep user logged in django

I made my login in the application. 我在应用程序中登录了。 Then I go to the screen that list all the users in my database. 然后我转到列出数据库中所有用户的屏幕。 When I select an especified user I lost my user that is logged. 当我选择一个特定的用户时,我丢失了记录的用户。 So, how can I keep my user in all the application? 那么,如何让我的用户保持所有应用程序?

My views.py that list all the users. 我的views.py列出了所有用户。 In this time, the url shows my user ( http://localhost:8000/os/acesso/consultausuario/9 ) 在这段时间,网址显示我的用户( http:// localhost:8000 / os / acesso / consultausuario / 9

def acesso_consultausuario(request, id=None):

    instance = get_object_or_404(usuario, id=id)

    queryset = usuario.objects.all().order_by('dat_criacao_usuario')
    instancia_usuario_filter = usuariofilter(request.GET, queryset=queryset)

    table = usuariotable(instancia_usuario_filter.qs)

    RequestConfig(request, paginate={'per_page': 25}).configure(table)

    paginator = Paginator(instancia_usuario_filter.qs, 5)
    page = request.GET.get('page')

    try:
        response = paginator.page(page)
    except PageNotAnInteger:
        # if page is not an integer, deliver first page
        response = paginator.page(1)
    except EmptyPage:
        # if page is out of range, deliver last pages of results
        response = paginator.page(paginator.num_pages)

     context = {
        "instance": instance,
        "filter": instancia_usuario_filter,
        "response": response,
        "table": table,
    }
    return render(request, 'consulta/consulta_usuario.html', context)


# Show an especified user that I selected before.
def acesso_consultausuariodetalhe(request, id=None):

    # Instância do usuário que foi selecionado na consulta
    instance = get_object_or_404(usuario, id=id)

    form = statususuarioForm(request.POST or None)

    if form.is_valid():  # All validation rules pass

        instance_status = form.save(commit=False)
        var_status = form.cleaned_data['statususuario']
        instance_status = statususuario.objects.get(desc_statususuario=var_status)


        # Salva o status atual na tabela logstatususuario
        instance_log = logstatususuario.objects.create(usuario = instance,
                                                        statususuario = instance_status)
        instance_log.save()

        # Seleciona o grupo de acesso
        #var_grupo = form.cleaned_data['grupo']
        #instance_grupo = grupo.objects.get(desc_grupo=var_grupo)

        # Atualiza o usuário com o novo status
        instance.statususuario = instance_status
        #instance.grupo = instance_grupo
        instance.save()

    context = {
        "instance": instance,
        "form": form,
    }

    return render(request, 'consultadetalhe/consulta_usuariodetalhe.html', context)

My filters.py 我的filters.py

    class usuariofilter(django_filters.FilterSet):

        dat_criacao_usuario = django_filters.DateFromToRangeFilter()

        class Meta:
            model = usuario
            fields = ['id', 'dat_criacao_usuario', 'nom_usuario', 'empresa', 'grupo', 'statususuario']

My tables.py

    class usuariotable(tables.Table):

        id = tables.Column(verbose_name='ID', attrs={"td": {"align": "left"}})
        dat_criacao_usuario = tables.Column(verbose_name='Data Cadastro'
                                    ,attrs={"td": {"align": "left"}})
        nom_usuario = tables.Column(verbose_name='Nome'
                                      ,attrs={"td": {"align": "left"}})
        empresa = tables.Column(verbose_name='Empresa'
                                      ,attrs={"td": {"align": "left"}})
        grupo = tables.Column(verbose_name='Grupo'
                                      ,attrs={"td": {"align": "left"}})
        statususuario = tables.Column(verbose_name='Status'
                                      ,attrs={"td": {"align": "left"}})
        ver = tables.TemplateColumn('<a href={% url "acesso_consultausuariodetalhe" record.id %} style="color:#e26c2c">Ver</a>',
                                    verbose_name = '', )


        def __init__(self, *args, vb_statusservico="",**kwargs):  #will get the c1_name from where the the class will be called.
            super().__init__(*args, **kwargs)

        class Meta:
            model = usuario
            empty_text = ('No results ...')
            fields = (
                        'id',
                        'dat_criacao_usuario',
                        'nom_usuario',
                        'empresa',
                        'grupo',
                        'statususuario',
                        'ver'
                      )

        def render_id(self, record):
            return record.id

For login a user, you ca use following code: 要登录用户,您可以使用以下代码:

from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # Redirect to a success page.
        ...
    else:
        # Return an 'invalid login' error message.
        ...

When a user logs in, the user's ID and the backend that was used for authentication are saved in the user's session 当用户登录时,用户的ID和用于身份验证的后端将保存在用户的会话中

Now for access logged user, you can just use request.user 现在,对于访问记录的用户,您可以使用request.user

ref: Django Documentation 参考: Django文档

In your views.py you can access your logged user like this: 在views.py中,您可以像这样访问您的登录用户:

    from django.contrib.auth.models import AnonymousUser

    def acesso_consultausuario(request):
        my_user = request.user
        #If you want to know if the user is logged in
        is_user_logged = my_user.is_authenticated

By the way, I am also a Spanish speaker but it is a good practice to code everything in English so you can share and get feedback with the world (even variable names). 顺便说一下,我也是一位西班牙语演讲者,但用英语编写所有代码是一个很好的做法,这样你就可以与世界分享并获得反馈(甚至是变量名)。 Hope this helps! 希望这可以帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM