[英]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.