Django表单如何获取当前登录用户的username和email并提交至ClinicalData表
结论
在views.py中实现更简便,同时安全性更有保障
如果选择在模板中实现,需要额外添加两个隐藏的input框存储当前用户的username和email,不但增加了模板的代码量,还存在前端数据被恶意篡改的风险,提交的用户信息可能被替换为其他值。
而在views中实现仅需要修改几行代码,直接从Django自动注入的request.user对象中获取登录用户的真实信息,完全不需要改动现有模板和表单的代码,也不存在数据被篡改的可能。
修改后的views.py参考代码
@login_required(login_url='login') def scanEnter(request): if request.method == 'POST': form = ScannerForm(request.POST) if form.is_valid(): # 先不提交到数据库,得到临时的ClinicalData对象 clinical_data = form.save(commit=False) # 直接从request.user获取当前登录用户的真实信息 clinical_data.username = request.user.username clinical_data.email = request.user.email # 赋值完成后再提交到数据库 clinical_data.save() return redirect('scanenter') else: # GET请求时初始化空表单即可 form = ScannerForm() context = {'form': form} return render(request, 'scan_enter_fac.html', context)
内容的提问来源于stack exchange,提问作者Clyde Mulenga
相关产品推荐
相关产品推荐

