Django 小實例S1 簡易學生選課管理系統 7 修改個人信息


Django 小實例S1 簡易學生選課管理系統 第7節——修改個人信息
點擊查看教程總目錄
作者自我介紹:b站小UP主時常直播編程+紅警三python1對1輔導老師

用戶模塊除了注冊登錄之外,還需要能夠修改個人的信息。

1 表單選擇

一般來說,修改視圖和注冊視圖可以用一樣的表單。

具體到這個教務管理系統,有一個業務邏輯為:
學生注冊信息可以選擇年級,但是修改個人信息不能修改年級。

所以學生信息修改的表單需要修改下(在user/forms.py中添加如下代碼)

class StuUpdateForm(StuRegisterForm):
    class Meta:
        model = Student
        fields = ('name',
                  'password',
                  'confirm_password',
                  'gender',
                  'birthday',
                  'email',
                  'info')

老師信息修改的表單可以使用原來注冊表單,即TeaRegisterForm

2 模板文件

明確了表單后,則可以添加對應模板文件
templates/user/update.html如下

<!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
    <meta charset="UTF-8">
    <title>
        Register
    </title>
    <link href="{% static 'css/register.css' %}" rel="stylesheet">
</head>
<body>

    <div class="register-container">
        <div class="register-title">修改個人信息</div>
        <form method="post" class="form">
            {% csrf_token %}
            {{form.as_p}}
            <p><input type="submit" value="修改" class="submit-button"/></p>
        </form>
        <div class="return-button"><a href="{% url 'course' kind %}">返回上一頁</a></div>

    </div>
</body>

3 添加視圖

首先,在視圖user/cbvs.py開頭,添加導入需要的庫和類

from django.views.generic import UpdateView
from user.forms import StuUpdateForm

再在最后添加如下代碼

class UpdateStudentView(UpdateView):
    model = Student
    form_class = StuUpdateForm
    template_name = "user/update.html"

    def get_context_data(self, **kwargs):
        context = super(UpdateStudentView, self).get_context_data(**kwargs)
        context.update(kwargs)
        context["kind"] = "student"
        return context

    def get_success_url(self):
        return reverse("course", kwargs={"kind": "student"})


class UpdateTeacherView(UpdateView):
    model = Teacher
    form_class = TeaRegisterForm
    template_name = "user/update.html"

    def get_context_data(self, **kwargs):
        context = super(UpdateTeacherView, self).get_context_data(**kwargs)
        context.update(kwargs)
        context["kind"] = "teacher"
        return context

    def get_success_url(self):
        return reverse("course", kwargs={"kind": "teacher"})

在視圖user/views.py開頭,添加導入上面兩個視圖類UpdateStudentView, UpdateTeacherView
再在最后添加如下代碼

def update(request, kind):
    func = None
    if kind == "student":
        func = UpdateStudentView.as_view()
    elif kind == "teacher":
        func = UpdateTeacherView.as_view()
    else:
        return HttpResponse(INVALID_KIND)

    pk = request.session.get("id")
    if pk:
        context = {
            "name": request.session.get("name", ""),
            "kind": request.session.get("kind", "")
        }
        return func(request, pk=pk, context=context)

    return redirect("login")

4 添加路由

添加對應路由(在user/urls.py中的urlpatterns的添加)

path('update/<slug:kind>', views.update, name="update"),

同時再去個人主頁中去添加對應的鏈接,使得用戶可以在個人主頁點擊它進入信息修改頁面。

這里把這個鏈接添加在個人主頁的用戶名這里,
同時出於簡介美觀的目的,用戶名只展示一個姓(后面會給這個姓添加一個圓背景)。

修改templates/course/nav.html的第29行
修改前為

            {{ info.name }}

修改后為

            <a href="{% url 'update' info.kind %}">
                {{ info.name.0 }}
            </a>

然后運行項目,進入個人主頁后,點擊用戶名,可進入信息修改頁面,效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM