【Django】教程-4-一个增删改查的Demo

【Django】教程-1-安装+创建项目+目录结构介绍
【Django】教程-2-前端-目录结构介绍
【Django】教程-3-数据库相关介绍

9. demo

一个包含前后端的,增删查demo

9.1 前端代码

layout.html 定义父级,需要被其他前端页面继承的html模板, JQ跟bootstrap 使用cdn的就可以!我的为本地的

{% load static %}
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}"/>
    <style>
        .navbar {
            border-radius: 0;
        }
    style>

head>
<body>

<nav class="navbar navbar-default">
    <div class="container-fluid">
        
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigationspan>
                <span class="icon-bar">span>
                <span class="icon-bar">span>
                <span class="icon-bar">span>
            button>
            <a class="navbar-brand" href="#">系统a>
        div>


        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="/user/list">用户管理a>li>
                <li><a href="/department/list">部门管理a>li>  
            ul>
            <form class="navbar-form navbar-left">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="查询">
                div>
                <button type="submit" class="btn btn-default">查询button>
            form>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">Linka>li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">Dropdown <span class="caret">span>a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Actiona>li>
                        <li><a href="#">Another actiona>li>
                        <li><a href="#">Something else herea>li>
                        <li role="separator" class="divider">li>
                        <li><a href="#">Separated linka>li>
                    ul>
                li>
            ul>
        div>
    div>
nav>


<div>
    {% block content %}{% endblock %}
div>

{#<h1>底部h1>#}
<script src="{ % static 'js/jquery-3.7.1.js %'}">script>
<script src="{ % static 'plugins/bootstrap-3.4.1/js/bootstrap.js %'}">script>

body>
html>

user_list.html

{% extends 'layout.html' %}

{% block content %}
    <div>
        <div class="container">
            <div style="margin-bottom: 10px">
                <a class="btn btn-success" href="/user/add">
                    <span class="glyphicon glyphicon-plus" aria-hidden="true">span>
                    新建用户a>
            div>
            <div class="panel panel-default">
                <div class="panel-heading"><span class="glyphicon glyphicon-th-list" aria-hidden="true">span>用户列表
                div>

                <table class="table table-bordered">
                    <thead>
                    <tr>
                        <th>#th>
                        <th>姓名th>
                        <th>密码th>
                        <th>年龄th>
                        <th>创建时间th>
                        <th>性别th>
                        <th>状态th>
                        <th>操作th>
                    tr>
                    thead>
                    <tbody>
                    {% for i in user_list %}
                        <tr>
                            <td>{{ i.id }}td>
                            <td>{{ i.name }}td>
                            <td>{{ i.password }}td>
                            <td>{{ i.age }}td>
                            <td>{{ i.create_time|date:"Y-m-d H:i:s" }}td>
                            <td>{{ i.get_gender_display }}td>
                            <td>{{ i.get_status_display }}td>
                            <td>
                                <a class="btn btn-primary btn-xs" href="/user/update/{{ i.id }}">编辑a>
                                <a class="btn btn-danger  btn-xs" href="/user/del?nid={{ i.id }}">删除a>
                            td>
                        tr>
                    {% endfor %}
                    tbody>
                table>
            div>
        div>
    div>

{% endblock %}

user_add.htnl 此文件为添加页 和 编辑也代码

{% extends 'layout.html' %}

{% block title %}
    {% if user %}更新用户{% else %}添加用户{% endif %}
{% endblock %}

{% block content %}
    <div>
        <div class="container">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title">
                        <span class="glyphicon glyphicon-tag" aria-hidden="true">{% if user %}更新用户{% else %}
                            添加用户{% endif %}span>
                    h3>
                div>

                <div class="panel panel-body">
                    <form method="post">

                        {% csrf_token %}

                        <div class="form-group">
                            <label for="exampleInputEmail1">用户名label>
                            <input type="text" class="form-control" id="user" name="user" placeholder="用户名">
                        div>
                        <div class="form-group">
                            <label for="exampleInputPassword1">密码label>
                            <input type="password" class="form-control" id="password" name="password"
                                   placeholder="密码">
                        div>
                        <div class="form-group">
                            <label for="exampleInputPassword1">年龄label>
                            <input type="password" class="form-control" id="age" name="age" placeholder="年龄"
                            >
                        div>
                        <button type="submit" class="btn btn-primary">保存button>
                    form>
                div>
            div>
        div>
    div>

{% endblock %}

9.2 app应用层代码

models.py 数据层

from django.utils import timezone
from django.db import models

# 数据库,表对应关系
class Department(models.Model):
    """部门表"""
    title = models.CharField(verbose_name="标题", max_length=32)

class UserInfo(models.Model):
    '''用户表'''

    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
    create_time = models.DateTimeField(verbose_name="创建时间", default=timezone.now)
    
    depart = models.ForeignKey(to="Department", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)

    gender_choices = (
        (1, "男"),
        (2, "女"),
    )
    gender = models.SmallIntegerField(verbose_name="性别", choices=gender_choices, default=1)
    # 数据状态
    status_choices = (
        (1, "已删除"),
        (0, "可用"),
    )
    status = models.SmallIntegerField(verbose_name="是否删除", choices=status_choices, default=0)

views.py 业务处理层

from django.shortcuts import render, HttpResponse, redirect
from appTang.models import UserInfo, Department

# 用户列表
def user_list(req):
    """用户展示"""
    user_list = UserInfo.objects.all()
    return render(req, 'user/user_list.html', {"user_list": user_list})

# 删除用户
def user_delete(req):
    """删除用户"""

    id = req.GET.get("nid")
    UserInfo.objects.filter(id=id).delete()
    return redirect('/user/list')

# 添加+更新用户
def user_add_or_update(req, user_id=None):
    if req.method == 'GET':
        if user_id:
            user = UserInfo.objects.filter(id=user_id).first
        else:
            user = None
        return render(req, 'user/user_add.html', {"user": user})
    elif req.method == 'POST':
        name = req.POST.get("user")
        password = req.POST.get("password")
        age = req.POST.get("age")

        if user_id:
            UserInfo.objects.filter(id=user_id).update(name=name, password=password, age=age)
        else:
            UserInfo.objects.create(name=name, password=password, age=age)

        return redirect('/user/list')

9.3 项目层代码

urls.py

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

# 映射关系,视图--->函数
urlpatterns = [
    # ----------------用户管理---------------------------
    path('user/list', views.user_list),
    path('user/del', views.user_delete),
    path('user/add', views.user_add_or_update),
    path('user/update//', views.user_add_or_update)

]

settings.py

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = 'django-insecure-cyp@mg00%e$k!vpx8a_%n*ap8c5wh285ez$pveb_1918^ty#@s'

DEBUG = True

ALLOWED_HOSTS = []

# Application definition
# 首先注册
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'appTang',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'duProject.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        # 'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'duProject.wsgi.application'
# 数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'app_tang',
        'USER': 'duxiaowei',
        'PASSWORD': 'duxiaowei135798642',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
STATIC_URL = 'static/'

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

9.4 整体目录层级

jQ 跟 bootstrap 建议使用cdn 即可,我因网络限制故而下载本地使用

【Django】教程-4-一个增删改查的Demo_第1张图片

9.5 页面效果图

【Django】教程-4-一个增删改查的Demo_第2张图片
【Django】教程-4-一个增删改查的Demo_第3张图片

你可能感兴趣的:(Django,django)