【问题标题】:How to update user password and store inside the database using django如何使用 django 更新用户密码并存储在数据库中
【发布时间】:2021-11-10 06:43:19
【问题描述】:

我试图让管理员更新员工密码、电子邮件地址和用户名,但新密码、电子邮件地址和用户名没有更新到我的数据库中,我在代码中做错了吗?

下面的图片是主页的样子:

此图像显示下一页,即员工密码、用户名和电子邮件地址将被更新的页面:

views.py

def update(request, id):
    context = {}
    user = get_object_or_404(User, id=id)
    if request.method == "POST":

        user.save()
        return redirect("/allstaff")
    return render(request, 'allstaff.html', context)

urls.py

from django.urls import path
from . import views

urlpatterns = [
    #path('', views.index, name='index'),
    #path('login/', views.login_view, name='login_view'),
    path('register/', views.register, name='register'),
    path('adminpage/', views.admin, name='adminpage'),
    path('customer/', views.customer, name='customer'),
    path('logistic/', views.logistic, name='logistic'),
    path('forget/', views.forget, name='forget'),
    path('newblock/', views.newblock, name='newblock'),
    path('quote/', views.quote, name='quote'),
    path('profile/', views.profile, name='profile'),
    path('adminprofile/', views.adminprofile, name='adminprofile'),

    path('', views.login_user, name='login'),
    path('home/', views.home, name='home'),
    path('allstaff/', views.allstaff, name='allstaff'),
    path('delete/<int:id>/', views.delete, name='delete'),
    path('update/<int:id>/', views.update, name='update'),
    path('logout/', views.logout_view, name='logout'),
    path('register/', views.register_view, name='register'),
    path('edit-register/', views.edit_register_view, name='edit_register'),


]

updatestaff.html

<!doctype html>
{% extends "home.html" %}
{% block content %}
{% load static %}

<html lang="en">
  <head>
    <style>
      .button {
  background-color: #38d39f;
  border-color: #38d39f;
  color: white;
  padding: 10px 20px;
  text-align: center;
  display: inline-block;
  margin: 4px 2px;
  cursor: pointer;
  border-radius: 16px;
  width: 275px;
}
    </style>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link href="https://fonts.googleapis.com/css?family=Roboto:300,400&display=swap" rel="stylesheet">

    <link rel="stylesheet" href="{% static 'fonts/icomoon/style.css' %}">

    <link rel="stylesheet" href="{% static 'css/owl.carousel.min.css' %}">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">

    <!-- Style -->
    <link rel="stylesheet" href="{% static 'css/style.css' %}">

    <title>Forget Password</title>
  </head>
  <body>
  <div class="content">
    <div class="container">
      <div class="row justify-content-center">

        <div class="col-md-6 contents">
          <div class="row justify-content-center">
            <div class="col-md-25">
              <div class="form-block">
                  <div class="mb-3">
                </div>

              <h2>Password reset</h2>
                <br/>
                <form method="post">
                  {% csrf_token %}
                  <h4>Having trouble signing in?</h4>
                  <p>Follow the steps below to get started</p>


                    <label for="Username">Username:</label><br>
                      <input type="text" id="username" name="username"><br>
                 <label for="Email">Email:</label><br>
                      <input type="text" id="Email" name="Email"><br>
                  <label for="password">Password:</label><br>
                      <input type="text" id="password" name="password"><br>
                  <label for="con-pass">Confirm Password:</label><br>
                      <input type="text" id="con-pass" name="con-pass"><br><br>

                  <button class="button" >Submit</button>

                  <br>
                </form>
              </div>
            </div>
          </div>

        </div>

      </div>
    </div>
  </div>


    <script src="{% static 'js/jquery-3.3.1.min.js' %}"></script>
    <script src="{% static 'js/popper.min.js' %}"></script>
    <script src="{% static 'js/bootstrap.min.js' %}"></script>
    <script src="{% static 'js/main.js' %}"></script>
  </body>
</html>
{% endblock %}

【问题讨论】:

    标签: python html django django-views django-forms


    【解决方案1】:

    首先,在 HTML 中有一个专用的密码输入类型,您应该考虑将其用于在 post reqeust 中存储密码。 &lt;input type="password"&gt;

    对于你的问题, 为了更新用户密码,您应该使用 user.set_password 方法。 检查this documentation here. 上面的链接还向您展示了如何更改用户的其他属性。

    在您的views.py 文件中,您不接受来自表单的请求数据。 所以,这样做。方法如下:

    def update(request, id):
        context = {}
        user = get_object_or_404(User, id=id)
        if request.method == "POST":
            # getting form input values from your HTML Form.
            username = request.POST.get('username')
            email = request.POST.get('Email')
            password = request.POST.get('password')
            
            user.username = username
            user.email = email
            user.set_password(password)
            user.save()
            return redirect("/allstaff")
        return render(request, 'allstaff.html', context)
    

    我希望这是你的答案。

    【讨论】:

    • 让我看看你发给我的文件
    • 您好,我已经尝试更改为您的,但仍然无法正常工作,我无法在数据库中更新密码
    • 按照您的建议,我仍然无法更新密码并将其存储在数据库中,还有其他帮助吗?
    • 您是否尝试直接从数据库更改密码?在这种情况下,我不确定您是否可以在不禁用密码哈希的情况下做到这一点。
    • Django 不保存普通密码,它会加密你的密码然后保存。
    猜你喜欢
    • 2016-05-11
    • 2014-09-25
    • 2011-04-26
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2023-03-04
    • 2023-04-03
    相关资源
    最近更新 更多