django - Django 3.0:无法在模板中获取用户名
问题描述
我的问题是在模板中,我自动获得超级用户用户名的访问权限(如果已登录),但不是基于买方(模型)的用户用户名。用户正在注册,也可以登录(我可以在数据库中看到它)。但在模板中,我无法获取超级用户以外的用户名。我不知道我在这里缺少什么。所以我把 view.py 的所有代码放在这里。同样在用户登录后,他看到 bookrepo:home 并且我在 header.html 中使用用户逻辑(bookrepo:home 扩展 header.html)
我在 models.py 文件中有名为 Buyer 的模型。并且基于这个模型,制作了两个modelForm。
这是model.py的代码
class Buyer(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.OneToOneField(User, on_delete=models.DO_NOTHING)
# additional attributes
contact = models.CharField('Contact #', max_length=16, unique=True, validators=[
RegexValidator(
regex=r'^\+?1?\d{9,15}$',
message="Phone number (Up to 15 digits) must be entered in the format: '+923001234567'."
),
], )
devices = models.CharField('Devices', unique=False, max_length=115, blank=True)
picture = models.ImageField(upload_to=profile_pic_path, null=True,blank=True)
def __str__(self):
return "{} {}".format(self.user.first_name, self.user.last_name)
class Meta:
get_latest_by = '-user.date_joined'
这是modelForms的代码
class RegistrationForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
confirm_password = forms.CharField(widget=forms.PasswordInput())
class Meta():
model = User
fields = ('username',
'email',
'password')
def clean(self):
cleaned_data = super(RegistrationForm, self).clean()
password = cleaned_data.get("password")
confirm_password = cleaned_data.get("confirm_password")
if password != confirm_password:
raise forms.ValidationError(
"Password and Confirm Password does not match"
)
class RegistrationFormPlus(forms.ModelForm):
class Meta():
model = Buyer
fields = ('contact',)
这是 header.html 的代码(不是 home.html)
{% if user.is_authenticated %}
<a class="nav-link" href="{% url 'bookrepo:logout' %}">Logout</a>
<h2>Welcome {{ user.username }}!</h2>
{% else %}
<a class="nav-link" href="{% url 'bookrepo:user_login' %}">Login</a>
{% endif %}
这是views.py的代码
def home(req):
bookz = Book.objects.order_by('title')
var = {'books': bookz, 'range': 10}
return render(req, 'bookrepo/home.html', context=var)
def registration(request):
registered = False
if request.method == 'POST':
reg_form = RegistrationForm(data=request.POST)
reg_form_plus = RegistrationFormPlus(data=request.POST)
if reg_form.is_valid() and reg_form_plus.is_valid():
user = reg_form.save()
user.set_password(user.password)
user.save()
user_plus = reg_form_plus.save(commit=False)
user_plus.user = user
user_plus.save()
registered = True
else:
print(reg_form.errors, reg_form_plus.errors)
print("else 2 chala")
else:
reg_form = RegistrationForm()
reg_form_plus = RegistrationFormPlus()
return render(request, 'bookrepo/signup.html',
{'reg_form': reg_form,
'reg_form_plus': reg_form_plus,
'registered': registered
})
@login_required
def special(request):
return HttpResponse("You are logged in. Nice!")
@login_required
def user_logout(request):
logout(request)
return HttpResponseRedirect(reverse('bookrepo:home'))
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
return HttpResponseRedirect(reverse('bookrepo:home'))
else:
print("Someone tried to login and failed.")
print("They used username: {} and password: {}".format(username, password))
return HttpResponse("Invalid login details supplied.")
else:
return render(request, 'bookrepo/login.html', {})
解决方案
您应该{{ buyer.user.username }}
在模板中使用来显示用户的用户名。
推荐阅读
- python - 如何使用包含 12 个值的平均每月数据的线性插值来生成精确中点的 365 天数据?
- android - 在清除搜索视图中的数据时,它应该删除过滤列表并填充原始列表
- python - 类型错误:+ 不支持的操作数类型:使用 str(sum(list)) 时的“int”和“str”
- android - 如何在 adb run-as 命令中使用“if”?
- java - SpringBoot:放置内部容器类的位置
- spring-boot - Teiid Spring Boot @SelectQuery
- angular - 通过 Angular 中的 URL 访问资产文件夹中的图像
- imagemagick - imagemagick识别方法上的maxBuffer长度超出错误
- c++ - 使用 find C++ 时,地图中的对象为空
- javascript - 无法设置未定义的属性 statusCode