จะรับ ID ผู้ใช้ของผู้ใช้ที่ล็อกอินใน Django ได้อย่างไร


124

จะรับ ID ผู้ใช้ที่ล็อกอินอยู่ในปัจจุบันได้อย่างไร?

ในmodels.py:

class Game(models.model):
    name = models.CharField(max_length=255)
    owner = models.ForeignKey(User, related_name='game_user', verbose_name='Owner')

ในviews.py:

gta = Game.objects.create(name="gta", owner=?)


1
@CiroSantilli 新疆改造中心法轮功六四事件 Exact Duplicate
Tessaracter

คำตอบ:


209

ขั้นแรกตรวจสอบให้แน่ใจว่าคุณได้เพิ่มSessionMiddlewareและAuthenticationMiddlewareมิดเดิลแวร์ในMIDDLEWARE_CLASSESการตั้งค่าของคุณแล้ว

กระแสuserอยู่ในrequestวัตถุคุณสามารถรับได้โดย:

def sample_view(request):
    current_user = request.user
    print current_user.id

request.userจะให้Userวัตถุแทนผู้ใช้ที่ล็อกอินอยู่ หากผู้ใช้ไม่ได้ลงทะเบียนในปัจจุบันจะถูกตั้งค่าตัวอย่างของrequest.user AnonymousUserคุณสามารถแยกพวกเขาออกจากสนามis_authenticatedได้ดังนี้:

if request.user.is_authenticated:
    # Do something for authenticated users.
else:
    # Do something for anonymous users.


3
จะเป็นอย่างไรหากเราต้องการตั้งรหัสผู้ใช้คีย์นอกเป็นโมเดลซึ่งเป็น id ของผู้ใช้ที่ล็อกอินอยู่
Krishnadas PC

คุณไม่จำเป็นต้องอัปเดตการตั้งค่าอีกต่อไป docs.djangoproject.com/th/1.11/topics/auth/default/…
wooden_metal

2
คำขอมาจากไหน?
Sören

ลิงก์ไปยังการอ้างอิงUserโมเดล
x-yuri


7

สมมติว่าคุณอ้างถึงAuth Userของ Django ในมุมมองของคุณ:

def game(request):
  user = request.user

  gta = Game.objects.create(name="gta", owner=user)

0

ฉันเขียนสิ่งนี้ในมุมมอง ajax แต่เป็นคำตอบที่กว้างขวางยิ่งขึ้นโดยให้รายชื่อผู้ใช้ที่ลงชื่อเข้าใช้และออกจากระบบแล้ว

is_authenticatedแอตทริบิวต์เสมอผลตอบแทนTrueสำหรับผู้ใช้ของฉันซึ่งฉันคิดว่าคาดว่านับตั้งแต่การตรวจสอบเฉพาะสำหรับ AnonymousUsers แต่ที่พิสูจน์ไร้ประโยชน์หากคุณกำลังจะบอกว่าการพัฒนาแอปแชทที่คุณจำเป็นต้องเข้าสู่ระบบผู้ใช้แสดง

การตรวจสอบนี้จะตรวจสอบเซสชันที่หมดอายุแล้วดูว่าผู้ใช้รายใดเป็นสมาชิกตาม_auth_user_idแอตทริบิวต์ที่ถอดรหัส:

def ajax_find_logged_in_users(request, client_url):
    """
    Figure out which users are authenticated in the system or not.
    Is a logical way to check if a user has an expired session (i.e. they are not logged in)
    :param request:
    :param client_url:
    :return:
    """
    # query non-expired sessions
    sessions = Session.objects.filter(expire_date__gte=timezone.now())
    user_id_list = []
    # build list of user ids from query
    for session in sessions:
        data = session.get_decoded()
        # if the user is authenticated
        if data.get('_auth_user_id'):
            user_id_list.append(data.get('_auth_user_id'))

    # gather the logged in people from the list of pks
    logged_in_users = CustomUser.objects.filter(id__in=user_id_list)
    list_of_logged_in_users = [{user.id: user.get_name()} for user in logged_in_users]

    # Query all logged in staff users based on id list
    all_staff_users = CustomUser.objects.filter(is_resident=False, is_active=True, is_superuser=False)
    logged_out_users = list()
    # for some reason exclude() would not work correctly, so I did this the long way.
    for user in all_staff_users:
        if user not in logged_in_users:
            logged_out_users.append(user)
    list_of_logged_out_users = [{user.id: user.get_name()} for user in logged_out_users]

    # return the ajax response
    data = {
        'logged_in_users': list_of_logged_in_users,
        'logged_out_users': list_of_logged_out_users,
    }
    print(data)

    return HttpResponse(json.dumps(data))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.