简体   繁体   English

在Django中获取登录用户的用户名

[英]Getting username of logged in user in django

I am new to Django and I just want to find a way to get the username of a logged in user and use it to get the boards of the user. 我是Django的新手,我只想找到一种方法来获取登录用户的用户名,并使用它来获取用户的董事会。 I may have done the models wrong by adding another user model but I would like some help in getting the user's username. 我可能通过添加其他用户模型来做错了模型,但是在获取用户名时我需要一些帮助。 Here is my views file: 这是我的意见档案:

    from django.shortcuts import render
from django.urls import reverse
from django.http import HttpResponseRedirect
from django.contrib.auth import authenticate,login
from django.contrib.auth.models import User
from .models import board_member,user
# Create your views here.

def index(request):
# Login form submitted?
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username and password:
            user = authenticate(username=username, password=password)
            # Login succeeded
            if user is not None:
                login(request, user)
                return HttpResponseRedirect(reverse('login_success'))
        # Login failed
        return HttpResponseRedirect(reverse('login_fail'))
    return render(request, 'Boards/login.html')

def login_success(request):
    return render(request, 'Boards/Homepage.html')

def getboards(request):
    username = request.user.get_username()
    boards = []
    for Memberships in board_member.objects.all():
        if username == Memberships.user.username:
            boards.append(Memberships.board)
    return render(request, 'Boards/Homepage.html', {'boards': boards, 'username':username})

def login_fail(request):
    return render(request, 'login_fail.html')

and this is my models file: 这是我的模型文件:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class board(models.Model):
    name = models.CharField(max_length=20)

    def __str__(self):
        return (self.name)

class user(models.Model):
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    boards = models.ManyToManyField(
        board, through='board_member', related_name="members")

    def __str__(self):
        return(self.username)


class list(models.Model):
    title = models.CharField(max_length=20)
    board = models.ForeignKey(
        board, related_name="lists", on_delete=models.CASCADE)

class board_member(models.Model):
    user = models.ForeignKey(
        user, related_name="memberships", on_delete=models.CASCADE)
    board = models.ForeignKey(
        board, related_name="memberships", on_delete=models.CASCADE)
    access = models.CharField(max_length=20)

    def __str__(self):
        return ("%s is %s in board %s" % (self.user, self.access, self.board))


class card(models.Model):
    list = models.ForeignKey(list, related_name="cards",
                             on_delete=models.CASCADE)
    text = models.CharField(max_length=100)
    date = models.DateField(auto_now=True)
    due = models.DateField()
    flag = models.CharField(max_length=20)

Normally to get the username of logged in user you do 通常,要获取登录用户的用户名,您需要执行

username = request.user.username. within the view itself. 在视图本身中。

However I am not sure why you created another user model. 但是我不确定为什么要创建另一个用户模型。 I guess you are trying to extend the existing auth user model. 我猜您正在尝试扩展现有的auth用户模型。

First you need to implement django custom user model and add extra field boards . 首先,您需要实现django自定义用户模型并添加额外的现场boards
After in views you can get all boards like 在查看后,您可以像

request.user.boards.all()

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

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