Django练习

news2025/7/19 16:50:40

目录

基础命令 

一、新建项目

二、配置

三、运行


Bootstrap下载

jQuery下载

基础命令 

#创建项目
django-admin startproject [项目名称]
#创建app应用
python manage.py startapp [app名称]
#运行
python manage.py runserver [端口号]
#创建数据模型和数据表结构
python manage.py makemigrations  
python manage.py migrate

一、新建项目

D:\DATA\PycharmProjects>django-admin startproject day
D:\DATA\PycharmProjects>cd day
D:\DATA\PycharmProjects\day>python manage.py startapp app01

新建static、css、img、js、plugins、templates

将bootstrap-3.4.1-dist放入plugins中,把jquery-3.6.0.js放入js中 

创建数据库day

写好models.py后需要在终端输入

D:\DATA\PycharmProjects\day>python manage.py makemigrations  
D:\DATA\PycharmProjects\day>python manage.py migrate

练习文件结构 

D:.
├─.idea
│  └─inspectionProfiles
├─app01
│  ├─migrations
│  │  └─__pycache__
│  ├─static
│  │  ├─css
│  │  ├─img
│  │  ├─js
│  │  └─plugins
│  │      └─bootstrap-3.4.1-dist
│  │          ├─css
│  │          ├─fonts
│  │          └─js
│  ├─templates
│  └─__pycache__
└─day
    └─__pycache__

二、配置

1.settings.py

#添加app应用
'app01.apps.App01Config'

#数据库设置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day',
        'USER': 'root',
        'PASSWORD': 'xxxx',
        'HOST': 'localhost',
        'PORT': 3306,
    }
}

"""
Django settings for day project.

Generated by 'django-admin startproject' using Django 4.1.

For more information on this file, see
https://docs.djangoproject.com/en/4.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-@v99r0!f(!5poa#9%#3$y*$-l8@o4_&evbp@dfl4_vwovb#r2x'

# SECURITY WARNING: don't run with debug turned on in production!
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',
    'app01.apps.App01Config'
]

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 = 'day.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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 = 'day.wsgi.application'


# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': BASE_DIR / 'db.sqlite3',
#     }
# }

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


# Password validation
# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators

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',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/4.1/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/

STATIC_URL = 'static/'

# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

 2.urls.py

"""day URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/4.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    path('depart/list/', views.depart_list),
    path('depart/add/', views.depart_add),
    path('depart/delete/', views.depart_delete),
    path('depart/<int:nid>/edit/', views.depart_edit),
  
]

3.views.py

from django.shortcuts import render,redirect
from app01 import models

def depart_list(reqeust):
    #数据库获取部门列表
    queryset=models.Department.objects.all()
    return render(reqeust,'depart_list.html',{'queryset':queryset})
def depart_add(reqeust):
    if reqeust.method=='GET':
        return render(reqeust,'depart_add.html')
    #获取用户提交的数据
    title=reqeust.POST.get("title")
    #保存到数据库
    models.Department.objects.create(title=title)
    #重定向到部门列表
    return redirect("/depart/list")
def depart_delete(reqeust):
    #获取id
    nid=reqeust.GET.get("nid")
    #删除
    models.Department.objects.filter(id=nid).delete()
    # 重定向到部门列表
    return redirect("/depart/list")
def depart_edit(reqeust,nid):
    if reqeust.method == 'GET':
        #根据nid,获取相关数据
        row_object=models.Department.objects.filter(id=nid).first()
        return render(reqeust,'depart_edit.html',{"row_object":row_object})
    # 获取用户提交的标题
    title = reqeust.POST.get("title")
    #根据id找到数据库中的数据并更新
    models.Department.objects.filter(id=nid).update(title=title)
    # 重定向到部门列表
    return redirect("/depart/list")

4.models.py

from django.db import models


class Department(models.Model):
    title = models.CharField(verbose_name='标题', max_length=32)

5. 在templates下创建相关html文件

5.1.depart_list.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <style>
        .navbar{
            border-radius: 0;
        }
    </style>
</head>
<body>
<nav class="navbar navbar-default">
  <div class="container">
    <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 navigation</span>
        <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="/depart/list">部门管理</a></li>
   

      </ul>

      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">登录</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">xxxx <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">个人资料</a></li>
            <li><a href="#">我的信息</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">注销</a></li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>

<div>
    <div class="container">
        <div style="margin-bottom: 10px">
            <a class="btn btn-success" href="/depart/add/" >
                <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>
                新建部门
            </a>
        </div>

        <div class="panel panel-default">
      <!-- Default panel contents -->
      <div class="panel-heading">
          <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
          部门列表
      </div>


      <!-- Table -->
      <table class="table table-bordered">
        <thead>
          <tr>
            <th>ID</th>
            <th>名称</th>
            <th>操作</th>
          </tr>
        </thead>
        <tbody>
          <tr>
              {% for obj in queryset %}
            <th >{{ obj.id }}</th>
            <td>{{ obj.title }}</td>
            <td>
                <a class="btn btn-primary btn-xs" href="/depart/{{ obj.id }}/edit/">编辑</a>
                <a class="btn btn-danger btn-xs" href="/depart/delete/?nid={{ obj.id }}">删除</a>
            </td>
          </tr>
            {% endfor %}
        </tbody>
      </table>
    </div>
        </div>
    </div>
</div>

<script src="{% static 'js/jquery-3.6.0.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

</body>
</html>

5.2.depart_add.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <style>
        .navbar{
            border-radius: 0;
        }
    </style>
</head>
<body>
<nav class="navbar navbar-default">
  <div class="container">
    <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 navigation</span>
        <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="/depart/list">部门管理</a></li>
      

      </ul>

      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">登录</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">xxx <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">个人资料</a></li>
            <li><a href="#">我的信息</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">注销</a></li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>
<div class="container">
  <div class="panel panel-default">
  <div class="panel-heading">
    <h3 class="panel-title">新建部门</h3>
  </div>
  <div class="panel-body">
   <form method="post">
     {% csrf_token %}
  <div class="form-group">
    <label >标题</label>
    <input type="text" class="form-control" name="title" placeholder="标题">
  </div>


  <button type="submit" class="btn btn-primary">提 交</button>
</form>
  </div>
</div>

</div>
<script src="{% static 'js/jquery-3.6.0.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

</body>
</html>

5.3.depart_edit.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
    <style>
        .navbar{
            border-radius: 0;
        }
    </style>
</head>
<body>
<nav class="navbar navbar-default">
  <div class="container">
    <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 navigation</span>
        <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="/depart/list">部门管理</a></li>
        

      </ul>

      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">登录</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">xxx <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">个人资料</a></li>
            <li><a href="#">我的信息</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">注销</a></li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>
<div class="container">
  <div class="panel panel-default">
  <div class="panel-heading">
    <h3 class="panel-title">修改部门</h3>
  </div>
  <div class="panel-body">
   <form method="post" >
     {% csrf_token %}
  <div class="form-group">
    <label >标题</label>
    <input type="text" class="form-control" name="title" placeholder="标题" value="{{ row_object.title }}">
  </div>


  <button type="submit" class="btn btn-primary">提 交</button>
</form>
  </div>
</div>

</div>
<script src="{% static 'js/jquery-3.6.0.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>

</body>
</html>

三、运行

1.在终端启动

D:\DATA\PycharmProjects\day> python manage.py  runserver 8000 

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
November 25, 2022 - 13:17:56
Django version 4.1, using settings 'day.settings'    
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

 2.访问

http://127.0.0.1:8000/depart/list/

3.可以添加部门,删除部门 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML PDF 查看器--RAD PDF 3.33 FOR ASP.NET

RAD PDF 的主要特点 基于 HTML 的 PDF 阅读器 客户端 PDF 编辑器 功能丰富的 PDF 表单填写器 交互式 PDF 表单设计器 保护 PDF 内容 签署和认证 PDF 文件 广泛的兼容性 & 在您的服务器上 将 PDF 集成到您的工作流程中 使用 ASP.NET 或 ASP.NET Core / 5 / 6 破解版RAD PDF…

pytorch深度学习实战lesson27

第二十七课 批量归一化 下面来讲批量归一化&#xff0c;现在几乎所有主流的卷积神经网络都是或多或少的用了批量归一化这个层。虽然我们之前看到的那些层比如 pooling 或 convolution&#xff0c;其实他们在80年代就出现过了&#xff0c;只是现在我们把它做得更深更大。批量归一…

Kanzi Shader入门

1. 版本 kanzi默认支持Opengl ES 2.0&#xff0c;在qnx平台可以支持到ES 3.0 2. 着色器 kanzi只支持【顶点着色器】和【片段着色器】 3. kanzi studio 无法直接使用shader&#xff0c;需要通过画刷和材质间接使用 在【普通节点】上设置背景画刷-【材质画刷】在【材质画刷…

原生Android 以面向对象的方式操作canvas

Android 自定义view 用canvas去画图形, 都是以面向过程的方式去一笔一笔的画, 而且画的图形也不能支持添加事件, 而html, js在这方面有大量的封装好的canvas框架, 很奇怪的是android上我也没有搜到类似的封装框架, 我只是个web前端开发者, 可能是我对android不了解没有搜索到&a…

Nodejs中包的介绍及npm安装依赖包的多种方法

文章目录1 包的介绍1.1 什么是包1.2 包的来源1.3 为什么需要包1.4 从哪里下载包1.5 如何下载包2 npm2.1 npm安装依赖包2.2 装包后多了哪些文件2.3 安装指定版本的包1 包的介绍 1.1 什么是包 Nodejs中的第三方模块又叫做包 就像电脑和计算机指的是相同的东西&#xff0c;第三…

Wireshark Ethernet and ARP 实验—Wireshark Lab: Ethernet and ARP v7.0

Wireshark Lab: Ethernet and ARP v7.0 1. Capturing and analyzing Ethernet frames 清除浏览器缓存 使用wireshark抓包并请求网页 修改“捕获数据包列表”窗口&#xff0c;仅显示有关 IP 以下协议的信息。 抓包干扰较多&#xff0c;故分析作者的数据包回答下列问题 包含…

Apollo 应用与源码分析:Monitor监控 - 基本概念与入口分析

Monitor 系统监控 目录 基本概念 代码结构分析 整体逻辑分析 基本概念 整体分类 该模块包含用于检查硬件状态和监视系统运行状况的代码等系统级软件。 在Apollo 5.5中&#xff0c;监视模块现在执行以下检查: 运行模块状态监控数据完整性监控数据频率监视系统运行状况(例…

springboot 点滴(3)springboot ThreadLocal实现单机权限认证

Springboot中权限认证的基本方案&#xff1a; 可以对URL进行HandlerInterceptor拦截&#xff0c;然后权限验证。 Client登录成功后&#xff0c;每次发送请求时&#xff0c;会将token等信息存放到header中。 Server收到请求&#xff0c;在HandlerInterceptor中从header获取用户…

3.4、可靠传输

3.4、可靠传输 3.4.1、基本概念 使用差错检测技术\color{red}差错检测技术差错检测技术&#xff08;例如循环冗余校验 CRC )&#xff0c;接收方的数据链路层就可检测出帧在传输过程中是否产生了误码\color{red}误码误码&#xff08;比特错误)。 数据链路层向上层提供的服务类…

hive中连续N天登录问题、topN问题、拉链表实现

一、连续N天登录问题 一般采用开窗函数来实现 首先需要用到窗口函数的向下取值 窗口函数lead 功能&#xff1a;用于从当前数据中基于当前行的数据向后偏移取值 语法&#xff1a;lead(colName&#xff0c;N&#xff0c;defautValue) colName&#xff1a;取哪一列的值 N&#xf…

RemObjects Remoting SDK for Delphi

RemObjects Remoting SDK for Delphi 远程处理SDK是一个框架&#xff0c;允许您创建使用服务公开性能的服务器。然后&#xff0c;可以通过网络远程访问这些解决方案&#xff0c;这些解决方案可以通过运行在大量语言和平台上的客户端软件来实现。 在当今时代&#xff0c;许多程序…

【人才盘点九宫格】你还不来学一学人才九宫格,知道你在领导心目中是属于哪一类人才吗?

文章目录一、九宫格的维度——绩效、能力、潜力1.1 维度一&#xff1a;绩效。1.2 维度二&#xff1a;能力。1.3 维度三&#xff1a;潜力。二、九宫格分类2.1 经典九宫格&#xff1a;绩效-能力九宫格2.2 高潜九宫格&#xff1a;绩效-潜力九宫格2.2.1 高潜九宫格图示2.2.2 高潜九…

SRV1:拥有一个阿里云服务器

1.1 简介 平台&#xff1a; 阿里云   时间&#xff1a; 2022.11.25   类型&#xff1a; 轻量应用服务器2核2G   链接&#xff1a; https://www.aliyun.com/daily-act/ecs/activity_selection?utm_contentse_1013075595 1.2 说明 本文购买的是阿里云的 轻量应用服务器2…

NFT 的洗盘交易,真的赚钱吗?

Nov. 17&#xff0c;Hanson Data Source&#xff1a; Footprint Analytics Wash Trade Analysis 洗盘交易造成的虚假交易是准确评估 NFT 项目、交易所和整个行业的最大障碍之一。 这份报告将会分析X2Y2市场的洗盘交易者如何从洗盘交易和代币质押中获励。同时分析了前10交易量…

3.3、差错检测

3.3、差错检测 3.3.1、比特差错 比特差错\color{red}比特差错比特差错 实际的通信链路都不是理想的&#xff0c;比特在传输过程中可能会产生差错: 111 可能会变成 000 ,而 000 也可能变成 111 。 比特流在传输过程中由于受到各种干扰&#xff0c;就可能会出现比特差错&#…

K8S基础知识学习

目录 一、什么是 Kubernetes &#xff1f; Kubernetes是Google在2014年开源的一个容器集群管理系统&#xff0c;Kubernetes简称K8S。 K8S用于容器化应用程序的部署&#xff0c;扩展和管理。 K8S提供了容器编排&#xff0c;资源调度&#xff0c;弹性伸缩&#xff0c;部署管理&a…

详解设计模式:简单工厂模式

简单工厂模式&#xff08;Smiple Factory Pattern&#xff09;&#xff1a;定义一个工厂类&#xff0c;他可以根据参数的不同返回不同类的实例&#xff0c;被创建的实例通常都具有共同的父类&#xff0c;简单工厂模式也被称为静态工厂模式。 &#xff5e; 本篇内容包括&#xf…

若依(Ruoyi-Vue-Plus版)——1.登录(SaToken)

这里学习一下若依框架的一个扩展版本&#xff1a; RuoYi-Vue-Plus: 后台管理系统 重写RuoYi-Vue所有功能 集成 Sa-TokenMybatis-PlusJacksonXxl-JobSpringDocHutoolOSS 定期同步 (gitee.com) 官方文档&#xff1a;文档预览 - Gitee.com 项目有关SaToken登录写在最后&#xff0c…

论文阅读笔记 | 三维目标检测——SECOND算法

如有错误&#xff0c;恳请指出。 文章目录1. 背景2 网络结构2.1 3d Backbone2.2 Loss Compute2.3 Data Augment3. 实验结果paper&#xff1a;《SECOND: Sparsely Embedded Convolutional Detection》 1. 背景 鉴于VoxelNet等3d检测算法中使用的3d卷积会导致计算量大且推理速度…

智慧税务解决方案-最新全套文件

智慧税务解决方案-最新全套文件一、建设背景税务大数据现状和挑战1、数据割裂&#xff0c;外部数据整合不足&#xff0c;智能化应用不足2、缺乏统一治理&#xff0c;数据资产不清&#xff0c;质量不高3、数据获取效率低&#xff0c;数据冗余、查询效率低4、 运营运维体系不健全…