python - 我们可以在不使用 django 中的 forms.py 的情况下编辑用户配置文件吗?
问题描述
如何使用 django 为注册用户创建视图以在用户仪表板中编辑那里的配置文件?请提供观点。我在没有使用 forms.py 的情况下创建了注册配置文件,现在我只想在不使用 forms.py 的情况下创建用户配置文件编辑。是否可以再次将数据提交到数据库。
(不要使用forms.py)
帐户/views.py
def register(request):
if request.method == 'POST':
#get form values
first_name = request.POST['first_name']
last_name = request.POST['last_name']
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
password2 = request.POST['password2']
#Check if passwords match
if password == password2:
#check username
if User.objects.filter(username = username).exists():
messages.error(request,'That username is taken')
return redirect('register')
else:
if User.objects.filter(email=email).exists():
messages.error(request,'That email is being used')
return redirect('register')
else:
#looks good
user = User.objects.create_user(username = username, password = password, email = email, first_name = first_name, last_name = last_name)
#login after register
# auth.login(request, user)
# messages.success(request, 'You are now logged in')
# return redirect('index')
user.save()
messages.success(request, 'You are now registered and can log in')
return redirect('login')
else:
messages.error(request,'passwords do not match')
return redirect('register')
else:
return render(request, 'accounts/register.html')
解决方案
我认为不使用 forms.py 就不可能在同一个视图中编辑配置文件和更改密码,但是 django.contrib.auth.forms 有一个 PasswordChangeForm 和一个 UserChangeForm 供您使用。
在文档中查看更多信息:https ://docs.djangoproject.com/en/1.8/_modules/django/contrib/auth/forms/
在你的意见.py
from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm
def edit_profile(request):
if request.method == "POST":
form = UserChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
messages.info(request, "Ok")
return redirect("main:homepage")
else:
messages.error(request, "Error")
return redirect("main:edit_profile")
else:
form = UserChangeForm(instance=request.user)
return render(request, "main/edit-profile.html", {'form': form})
def change_password(request):
if request.method == "POST":
form = PasswordChangeForm(data=request.POST, user=request.user)
if form.is_valid():
form.save()
messages.info(request, "ok")
update_session_auth_hash(request, form.user)
return redirect("main:edit_profile")
else:
messages.error(request, "error")
return redirect("main:change_password")
else:
form = PasswordChangeForm(user=request.user)
return render(request, "main/change-password.html", {'form': form})
推荐阅读
- python-3.x - 如何使用while循环删除列表元素
- python - 正则表达式电话和电子邮件提取输出错误 - python
- android - ScriptIntrinsicYuvToRGB 图像格式
- php - 向会话数组添加和删除值
- google-cloud-firestore - 使用 Flutter 和 Firestore 显示某些数据
- php - 连接Mysql数据库的php代码不适用
- discord.js - Discord JS Bot - 如何创建粗俗过滤器?
- react-native - 我的 iOS xcworkspace/xcproj 文件的自定义路径
- laravel - Laravel 应用程序未在 public_html 文件夹中运行
- c - 在 C 错误中将 Char 数组转换为 Long