1. 程式人生 > 程式設計 >Django之全域性使用request.user.username的例項詳解

Django之全域性使用request.user.username的例項詳解

我就廢話不多說了,大家還是直接看程式碼吧!

def pro_mgr():
  """
  獲取當前登陸使用者的專案
  :return:
  """
  if DEVELOP_USER_NAME == 'admin':
    return Project.objects.all()
  return Project.objects.filter(prj_mgr=DEVELOP_USER_NAME)


class DeployApplyForm(ModelForm):
  # project = forms.ModelChoiceField(queryset=pro_mgr())
  bgn_time = forms.DateTimeField(initial=datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S"),label=u'開始',input_formats=['%Y-%m-%dT%H:%M:%S'],widget=forms.DateTimeInput(
      attrs={'type': 'datetime-local','emptyTips': u'請選擇時間','step': '1'}))
  end_time = forms.DateTimeField(initial=datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S"),label=u'結束','step': '1'}))

  class Meta:
    model = DeployApply
    fields = '__all__'


  def __init__(self,*args,**kwargs):
    prj_mgr = kwargs.pop('prj_mgr','')
    super(DeployApplyForm,self).__init__(*args,**kwargs)
    if prj_mgr == 'admin':
      self.fields['project'] = forms.ModelChoiceField(queryset=Project.objects.all())
    else:
      self.fields['project'] = forms.ModelChoiceField(queryset=Project.objects.filter(prj_mgr=prj_mgr))
//views.py
deployApplyForm = DeployApplyForm(initial=wfContent[0],prefix='deployApply',prj_mgr=request.user.username)
//settings.py
# DEVELOP模式下登陸使用者
DEVELOP_USER_NAME = 'admin'

補充知識:Django 中 request.user 呼叫使用者名稱時出現 AnonymousUser(匿名物件)的錯誤

說明

已經添加了額外的屬性,現在想通過request.user的方式獲取,列印request.user是一個AnonymousUser物件,無法獲取 user 值!

原因

1. 沒有登入賬號或者無法登入成功。

2. 登入成功但是在登入程式碼中沒有註冊 cookie,導致無法驗證身份!

3. 其它原因。

解決方法

1. 登入賬號,你也可以試著使用 admin 賬戶登入後,看看能否解決。

2. 參考以下程式碼,在 login 中註冊cookis(大多數是這種情況):

auth_obj = auth.authenticate(request,username=username,password=password)
if auth_obj:
  # 需要auth驗證cookie
  auth.login(request,auth_obj)
  ....

3. 換另一種方式重寫 login 。

以上這篇Django之全域性使用request.user.username的例項詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。