簡體   English   中英

如何讓用戶登錄django

[英]How to keep user logged in django

我在應用程序中登錄了。 然后我轉到列出數據庫中所有用戶的屏幕。 當我選擇一個特定的用戶時,我丟失了記錄的用戶。 那么,如何讓我的用戶保持所有應用程序?

我的views.py列出了所有用戶。 在這段時間,網址顯示我的用戶( 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)

我的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

要登錄用戶,您可以使用以下代碼:

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.
        ...

當用戶登錄時,用戶的ID和用於身份驗證的后端將保存在用戶的會話中

現在,對於訪問記錄的用戶,您可以使用request.user

參考: Django文檔

在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

順便說一下,我也是一位西班牙語演講者,但用英語編寫所有代碼是一個很好的做法,這樣你就可以與世界分享並獲得反饋(甚至是變量名)。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM