Django教程第2章| Web开发实战-用户管理

专栏系列:Django学习教程

前言

从第2章开始,我们正式以实战为核心开发用户管理系统,计划实现效果图所有模块功能。

本章我们将开始实现我们第一个功能模块:用户管理。

技术栈

Boostrap、jQuery、​​​Django

功能模块

模块 进度 功能点
部门管理 完成 增删改查,搜索,分页
用户管理 完成 增删改查,搜索,分页
认证 完成 登录/验证码/修改密码
数据统计 完成 echarts折线图,柱状图,饼图
文件上传 完成 解析文件到db,form表单上传图片

效果图

Django教程第2章| Web开发实战-用户管理_第1张图片

Django教程第2章| Web开发实战-用户管理_第2张图片

Django教程第2章| Web开发实战-用户管理_第3张图片

 用户管理案例

基于mysite项目创建名为 ums 的app

1.创建应用程序

python manage.py startapp ums

模板文件和静态文件分别放入templates和static文件夹,django会自动加载到容器。

如果你像放到其他位置可以在 settings.py 里面搜索template和static进行更改路径(非特殊需求不建议更改)。

bce840905fe84fe395ca71358f46a400.png

2.数据库配置

mysite/settings.py文件中配置你的MySQL连接信息

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ums',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123456',
    }
}

3.下载mysqlclient

mysqlclient是django 数据库连接库,负责数据的操作和持久化,初始化表结构。

pip install mysqlclient

4.定义模型

ums/models.py 放入以下内容

class UserInfo(models.Model):
    username = models.CharField(verbose_name='用户名', max_length=32)
    password = models.CharField(verbose_name='密码', max_length=64)
    age = models.IntegerField(verbose_name='年龄')
    salary = models.DecimalField(verbose_name='工资', max_digits=10, decimal_places=2)
    gender_choices =(
        (1, '男'),
        (2, '女')
    )
    gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices)
    create_time = models.DateTimeField(verbose_name='创建时间')

初始化表结构

$ python manage.py makemigrations

$ python manage.py migrate

5、编写视图

ums/views.py 编写用户增删改查

def user_list(request):
    """ 查询用户列表 """

    # 获取所有用户列表 [obj,obj,obj]
    queryset = models.UserInfo.objects.all()

    return render(request, 'user_list.html', {'queryset': queryset})


def user_add(request):
    """ 添加用户 """
    if request.method == "GET":
        context = {
            'gender_choices': models.UserInfo.gender_choices,
            "dept_list": models.Department.objects.all()
        }
        return render(request, 'user_add.html', context)

    # 获取用户提交的数据
    user = request.POST.get('username')
    pwd = request.POST.get('pwd')
    age = request.POST.get('age')
    salary = request.POST.get('salary')
    ctime = request.POST.get('ctime')
    gender = request.POST.get('gd')
    dept = request.POST.get('dp')

    # 添加到数据库中
    models.UserInfo.objects.create(username=user, password=pwd, age=age,
                                   salary=salary, create_time=ctime,
                                   gender=gender, dept_id=dept)

    # 返回到用户列表页面
    return redirect("/user/list/")

def user_delete(request, nid):
    """ 删除用户 """
    models.UserInfo.objects.filter(id=nid).delete()
    return redirect('/user/list/')


def user_edit(request, nid):
    """ 编辑用户 """
    row_object = models.UserInfo.objects.filter(id=nid).first()

    if request.method == "GET":
        # 根据ID去数据库获取要编辑的那一行数据(对象)
        form = UserModelForm(instance=row_object)
        return render(request, 'user_edit.html', {'form': form})

    form = UserModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        # 默认保存的是用户输入的所有数据,如果想要再用户输入以外增加一点值
        # form.instance.字段名 = 值
        form.save()
        return redirect('/user/list/')
    return render(request, 'user_edit.html', {"form": form})


from django import forms


class UserModelForm(forms.ModelForm):
    username = forms.CharField(min_length=3, label="用户名")

    class Meta:
        model = models.UserInfo
        fields = ["username", "password", "age", 'salary', 'create_time', "gender", "dept"]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环找到所有的插件,添加了class="form-control"
        for name, field in self.fields.items():
            field.widget.attrs = {"class": "form-control", "placeholder": field.label}

6、编写模板

templates下编写模板

user_list.html

{% extends 'layout.html' %}

{% block content %}
    
用户列表
{% for obj in queryset %} {% endfor %}
ID 用户名 密码 年龄 工资 创建时间 性别 所属部门 操作
{{ obj.id }} {{ obj.name }} {{ obj.password }} {{ obj.age }} {{ obj.salary}} {{ obj.create_time|date:"Y-m-d" }} {{ obj.get_gender_display }} {{ obj.dept.name}} 编辑 删除
{% endblock %}

user_add.html 

{% extends 'layout.html' %}

{% block content %}
    

新建用户

{% csrf_token %}
{% endblock %}

user_edit.html

{% extends 'layout.html' %}

{% block content %}
    

编辑用户

{% csrf_token %} {% for field in form %}
{{ field }} {{ field.errors.0 }}
{% endfor %}
{% endblock %}

layout.html

{% load static %}



    
    Title
    
    




{% block content %}{% endblock %}

7、配置路由

mysite/urls.py 配置路由

from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    # 用户管理
    path('user/list/', views.user_list),
    path('user/add/', views.user_add),
    path('user//edit/', views.user_edit),
    path('user//delete/', views.user_delete),
]

启动程序

python manage.py runserver

启动后,访问127.0.0.1:8000/user/list

需要完整源代码评论区留言:想要源码

如果本文对你有帮助,记得点赞+关注,你的支持是我最大的动力!

下一章:Django教程第3章| Web开发实战 | 用户登录

你可能感兴趣的:(Django教程,django,python,web,开发)