Django框架搭建

Django框架搭建

Django搭建基本的操作流程,没有基础知识的讲解

一、Anaconda 虚拟环境安装

1. 安装url

Free Download | Anaconda

2. 环境配置 path

一般安装完成之后自动配置,自己看一眼,基本不需要配置。

C:\Anaconda\Scripts

C:\Anaconda\Library\mingw-w64\bin

C:\Anaconda\Library\usr\bin

C:\Anaconda\Library\bin

输入图片说明

3. 查看已有环境

conda env list

4. 新建环境

conda create -n mypython37 python=3.7

mypython37为环境名字,python=3.7版本号

5. 使用激活or切换

conda activate mypython37

6. 安装包

pip install xxx    
conda install xxx

二、PyCharm安装

社区版 PyCharm

三、Django框架配置

1.安装Django

pip install Django
输入图片说明

2.创建Django项目

django-admin startproject HelloDjango

输入图片说明

3.创建应用

先切换到你的项目目录下

cd HelloDjango

python manage.py startapp myApp

输入图片说明

4.使用Pycharm打开项目

新建两个文件夹
static
templates
项目目录

HelloDjango/ # 项目根目录
│
├── HelloDjango/ # 项目配置目录
│ ├── __init__.py
│ ├── settings.py # 项目配置文件
│ ├── urls.py # 项目的URL配置文件
│ └── wsgi.py # WSGI配置文件
│
├── myapp/ # 应用目录
│ ├── migrations/ # 数据库迁移文件目录
│ ├── __init__.py
│ ├── admin.py # 管理后台配置文件
│ ├── apps.py # 应用配置文件
│ ├── models.py # 模型定义文件
│ ├── tests.py # 测试文件
│ └── views.py # 视图函数文件
│
├── static/ # 存放静态文件(如 CSS、JavaScript、图片等)
│
├── templates/ # 存放模板文件(HTML)
│
└── manage.py # Django管理工具

5. settings . py 设置

  • 注册app

注册之前创建的应用

INSTALLED_APPS = [

······

'myApp’

]
  • 模板设置

输入图片说明

import os    #在文件开头添加

'DIRS': [os.path.join(BASE_DIR, 'templates’)]
  • static设置

自带,查看自己项目是否有。

STATIC_URL = '/static/'

  • 时区设置
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

6. 启动项目

在pycharm中或者在之前Anaconda Prompt中都可以,前提是要切换到当前的项目目录下。
输入图片说明

python manage.py runserver

输入图片说明
输入图片说明

四、MySQL和Navicat 安装

MySQL 下载
输入图片说明

参考博客安装mysql
参考博客激活Navicat Premium15
参考博客激活Navicat Premium16

五、项目配置MySQL

1. 创建数据库

打开Navicat,新建MySQL连接。

用户名密码输入安装MySQL时的用户名密码。

输入图片说明
新建数据库,mydb名字自己取
输入图片说明

2.在项目中配置Django

settings.py

DATABASES = {  
    'default': {  
        'ENGINE': 'django.db.backends.mysql',  
        'NAME': 'mydb',     #你得数据库名字
        'HOST': 'localhost',  
        'PORT': 3306,  
        'USER': 'root',                #你的数据库账号
        'PASSWORD': '123456'           #密码
    }  
}

项目下的__init__.py(注意不是app下的)

import pymysql  
pymysql.install_as_MySQLdb()

输入图片说明

有红色曲线,鼠标放上,安装pymysql

输入图片说明

运行项目

python manage.py runserver

没有报错,成功!!

3. 实体类 model . py

  • 随便写一个model,MyUser类
# User类
class MyUser(models.Model):
    username = models.CharField(max_length=30, unique=True)
    password = models.CharField(max_length=128)
    join_date = models.DateTimeField(auto_now_add=True)
    phone_number = models.CharField(max_length=11, blank=True, null=True)
    avatar = models.ImageField(upload_to="avatars/", blank=True, null=True)  #头像
    is_admin = models.BooleanField(default=False)

    class Meta:
        db_table = "user"
        verbose_name = "用户基础信息"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username
  • 生成迁移文件

python manage.py makemigrations
输入图片说明
因为上面使用图片ImageField,才会报这个错误,按照他说的错误,安装对应的包。

输入图片说明
再次执行生成迁移文件
输入图片说明

  • 执行迁移

python manage.py migrate

输入图片说明

刷新表,出来了一系列的表,其中就有刚刚写的model : User
输入图片说明
OK!大功告成了!!

六、路由 url. py

  • 修改项目下的url. py
from django.contrib import admin  
from django.urls import path, include  
  
urlpatterns = [  
    path('admin/', admin.site.urls),  
    path("", include("myApp.urls"))  
]
  • 2.复制url. py文件到myapp下
from django.urls import path  
from myApp import views  
  
urlpatterns = [  
    path('index', views.index, name='index'),  
]

七、视图 view. py

  • 创建视图

可以看到index下有一条黄色的曲线,含义为view.py中没有index这个view(视图),点击创建。
输入图片说明
在view.py中创建了一个叫 index()的方法。
输入图片说明
所以说,这个方法名字要和url的名字一一对应。
随便写一个返回看看效果

from django.http import HttpResponse  

def index(request):  
    return HttpResponse("Hello world django")
  • runserver

输入图片说明
404未正确填写url
url填写正确
127.0.0.1:8000/index
输入图片说明
为了方便可以这么写

urlpatterns = [  
    path('index', views.index, name='index'),  
    path('', views.index, name='index'),  
]

这样空着也是跳转到index视图。

八、模板文件 templates

模板文件就是我们浏览网站看到的网页html文件。
在模板文件夹下新建一个HTML文件 index.html
前端框架使用 Bootstrap

  • 1.导入
<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">  
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua" crossorigin="anonymous"></script>  
    <title>Title</title>  
</head>  
<body>  
  
</body>  
</html>
  • 2.使用表格
 <body>  
   <table class="table table-hover">  
    <thead>    
	  <tr>      
	   <th scope="col">#</th>  
       <th scope="col">First</th>  
       <th scope="col">Last</th>  
       <th scope="col">Handle</th>  
     </tr>  
    </thead>  
  <tbody>    
    <tr>      
    <th scope="row">1</th>  
      <td>Mark</td>  
      <td>Otto</td>  
      <td>@mdo</td>  
    </tr>    
    <tr>      
    <th scope="row">2</th>  
      <td>Jacob</td>  
      <td>Thornton</td>  
      <td>@fat</td>  
    </tr>    
    <tr>      
    <th scope="row">3</th>  
      <td colspan="2">Larry the Bird</td>  
      <td>@twitter</td>  
    </tr>  
    </tbody>
    </table>  
</body>  
</html>
  • 3.调整视图
    返回模板,而不是一个字符串
def index(request):  
    return render(request, "index.html")

输入图片说明
显示出来的是一个bootstrap格式的表格,即表示bootstrap前端框架使用成功!

九、项目中使用MySQL数据库简单示例

输入图片说明
join_date 2023-10-30 00:29:58.469105
手动在这个user表里添加了两条数据,查询这个表的数据,显示在网站上的表格里。

1.查询

view

def index(request):  
    users = MyUser.objects.all()   # 查询全部  
    return render(request, "index.html", {'users': users})

index.html

<table class="table table-hover">  
    <thead>    
     <tr>       
	    <th scope="col">#</th>  
        <th scope="col">账号</th>  
        <th scope="col">密码</th>  
        <th scope="col">日期</th>  
      </tr>    
     </thead>    
    <tbody>    
     {% for user in users %}  
     <tr>  
        <th scope="row">{{ user.id }}</th>  
        <td>{{user.username}}</td>  
        <td>{{user.password}}</td>  
        <td>{{user.join_date}}</td>  
    </tr>    
    {% endfor %}  
    </tbody>  
</table>

{% %} {{ }}为Django模板语言
整个操作流程就是这样,有条件的查询参考博客很清晰。

2.修改

1)新建详情界面

修改模板index文件,添加了详情按钮

<table class="table table-hover">  
    <thead>    
    <tr>        
	    <th scope="col">序号</th>  
        <th scope="col">账号</th>  
        <th scope="col">密码</th>  
        <th scope="col">日期</th>  
        <th scope="col">操作</th>  
    </tr>    
    </thead>    
    <tbody>    
    {% for user in users %}  
    <tr>  
        <th scope="row">{{ user.id }}</th>  
        <td>{{user.username}}</td>  
        <td>{{user.password}}</td>  
        <td>{{user.join_date}}</td>  
        <td>            
          <a href="/detail?user_id={{ user.id }}"><button type="button" class="btn btn-primary">详情</button></a> 
        </td>  
    </tr>    
    {% endfor %}  
    </tbody>  
</table>

详情按钮加超链接,url后面跟user_id参数

新建detail.html,设置路由,建立详情视图

# 路由
path('detail', views.detail, name='detail'),

# 视图
def detail(request):  
    return render(request, "detail.html")

detail.html

<!DOCTYPE html>  
<html lang="cn">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"  
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">  
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"  
            integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"  
            crossorigin="anonymous"></script>  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"  
            integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua"  
            crossorigin="anonymous"></script>  
    <title>详情</title>  
</head>  
<body>  
<form>  
    <div class="form-group">  
    <label for="id" class="sr-only">id</label>  
    <input type="text" readonly class="form-control-plaintext" id="id" name="id" value="{{ user.id }}">  
</div>  
<div class="form-group">  
    <label for="username">用户名</label>  
    <input type="text" class="form-control" id="username" name="username" value="{{ user.username }}">  
</div>  
<div class="form-group">  
    <label for="password">密码</label>  
    <input type="password" class="form-control" id="password" name="password" value="{{ user.password }}">  
</div>  
  
<div class="form-group">  
    <label for="join_date" class="sr-only">创建时间</label>  
    <input type="text" readonly class="form-control-plaintext" id="join_date" name="join_date" value="{{ user.join_date }}">  
</div>
     <button type="button" class="btn btn-primary">修改</button>  
     <button type="button" class="btn btn-danger">删除</button>  
</form>  
</body>  
</html>

输入图片说明

2)修改删除功能

修改detail模板文件

<body>  
<form method="post" action="detail_update">  
    {% csrf_token %} 
    <div class="form-group">  
        <label for="id" class="sr-only">id</label>  
        <input type="text" readonly class="form-control-plaintext" id="id" name="id" value="{{ user.id }}">  
    </div>    
    <div class="form-group">  
        <label for="username">用户名</label>  
        <input type="text" class="form-control" id="username" name="username" value="{{ user.username }}">  
    </div>    
    <div class="form-group">  
        <label for="password">密码</label>  
        <input type="password" class="form-control" id="password" name="password" value="{{ user.password }}">  
    </div>  
    <div class="form-group">  
        <label for="join_date" class="sr-only">创建时间</label>  
        <input type="text" readonly class="form-control-plaintext" id="join_date" name="join_date" value="{{ user.join_date }}">  
    </div>    
    <button type="submit" class="btn btn-primary">修改</button>  
    <a href="detail_del?user_id={{ user.id }}"><button type="button" class="btn btn-danger">删除</button></a>  
</form>  
</body>

{% csrf_token %} POST请求需要在表单中包含一个CSRF令牌。
路由url

path('detail_update', views.detail_update, name='detail_update'),  
path('detail_del', views.detail_del, name='detail_del'),

视图view

def detail_update(request):  
    user_id = request.POST.get('id')  
    user = MyUser.objects.get(pk=user_id)  
    username = request.POST.get('username')  
    password = request.POST.get('password')  
    user.username = username  
    user.password = password  
    user.save()  
    return redirect('index')  
def detail_del(request):  
    user_id = request.GET.get('user_id')  
    user = MyUser.objects.get(pk=user_id)  
    user.delete()  
    return redirect('index')

3.添加

index.html 加一个按钮

<a href="addUser.html"><button type="button" class="btn btn-success">添加</button></a>

创建addUser.html

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"  
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">  
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"  
            integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"  
            crossorigin="anonymous"></script>  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"  
            integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua"  
            crossorigin="anonymous"></script>  
    <title>添加</title>  
</head>  
<body>  
<form method="post" action="add_user_post">  
    {% csrf_token %}  
  
    <div class="form-group">  
        <label for="username">用户名</label>  
        <input type="text" class="form-control" id="username" name="username" required>  
    </div>    <div class="form-group">  
        <label for="password">密码</label>  
        <input type="password" class="form-control" id="password" name="password" required>  
    </div>  
    <button type="submit" class="btn btn-primary">添加</button>  
  
</form>  
</body>  
</html>

路由

path('add_user', views.add_user, name='add_user'),  
path('add_user_post', views.add_user_post, name='add_user_post'),

视图

def add_user(request):  
    return render(request, "addUser.html")  
  
  
def add_user_post(request):  
    username = request.POST.get('username')  
    password = request.POST.get('password')  
    MyUser.objects.create(username=username, password=password)  
    return redirect('index')

输入图片说明

至此,添加功能完成。

十、完整代码

settings.py


import os  
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/3.2/howto/deployment/checklist/  
  
# SECURITY WARNING: keep the secret key used in production secret!  
SECRET_KEY = 'django-insecure-^ko%qqehu@$)-&i$-4iyq#^nbg3jzz_5!f#(h^99d@c#154nni'  
  
# 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',  
    'myApp'  
]  
  
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 = 'HelloDjango.urls'  
  
TEMPLATES = [  
    {  
        'BACKEND': 'django.template.backends.django.DjangoTemplates',  
        'DIRS': [os.path.join(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 = 'HelloDjango.wsgi.application'  
  
  
# Database  
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases  
  
DATABASES = {  
    'default': {  
        'ENGINE': 'django.db.backends.mysql',  
        'NAME': 'mydb',  
        'HOST': 'localhost',  
        'PORT': 3306,  
        'USER': 'root',  
        'PASSWORD': '123456'  
    }  
}  
  
  
# Password validation  
# https://docs.djangoproject.com/en/3.2/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/3.2/topics/i18n/  
  
LANGUAGE_CODE = 'zh-hans'  
  
TIME_ZONE = 'Asia/Shanghai'  
  
USE_I18N = True  
  
USE_L10N = True  
  
USE_TZ = True  
  
  
# Static files (CSS, JavaScript, Images)  
# https://docs.djangoproject.com/en/3.2/howto/static-files/  
  
STATIC_URL = '/static/'  
  
# Default primary key field type  
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field  
  
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

HelloProject/url.py

from django.contrib import admin  
from django.urls import path, include  
  
urlpatterns = [  
    path('admin/', admin.site.urls),  
    path("", include("myApp.urls"))  
]

myApp/url.py

from django.urls import path  
  
from myApp import views  
  
urlpatterns = [  
    path('index', views.index, name='index'),  
    path('', views.index, name='index'),  
    path('detail', views.detail, name='detail'),  
    path('detail_update', views.detail_update, name='detail_update'),  
    path('detail_del', views.detail_del, name='detail_del'),  
    path('add_user', views.add_user, name='add_user'),  
    path('add_user_post', views.add_user_post, name='add_user_post'),  
]

model.py

from django.db import models  
  
# Create your models here.  
  
  
# User类  
class MyUser(models.Model):  
    username = models.CharField(max_length=30, unique=True)  
    password = models.CharField(max_length=128)  
    join_date = models.DateTimeField(auto_now_add=True)  
    phone_number = models.CharField(max_length=11, blank=True, null=True)  
    avatar = models.ImageField(upload_to="avatars/", blank=True, null=True)  
    is_admin = models.BooleanField(default=False)  
  
    class Meta:  
        db_table = "user"  
        verbose_name = "用户基础信息"  
        verbose_name_plural = verbose_name  
  
    def __str__(self):  
        return self.username

view.py

from django.shortcuts import render, redirect  
  
# Create your views here.  
  
from django.http import HttpResponse  
  
from myApp.models import MyUser  
  
  
def index(request):  
    users = MyUser.objects.all()   # 查询全部  
    return render(request, "index.html", {'users': users})  
  
  
def detail(request):  
    user_id = request.GET.get('user_id')  
    user = MyUser.objects.get(pk=user_id)  
    return render(request, "detail.html", {'user': user})  
  
  
def detail_update(request):  
    user_id = request.POST.get('id')  
    user = MyUser.objects.get(pk=user_id)  
    username = request.POST.get('username')  
    password = request.POST.get('password')  
    user.username = username  
    user.password = password  
    user.save()  
    return redirect('index')  
  
  
def detail_del(request):  
    user_id = request.GET.get('user_id')  
    user = MyUser.objects.get(pk=user_id)  
    user.delete()  
    return redirect('index')  
  
  
def add_user(request):  
    return render(request, "addUser.html")  
  
  
def add_user_post(request):  
    username = request.POST.get('username')  
    password = request.POST.get('password')  
    MyUser.objects.create(username=username, password=password)  
    return redirect('index')

index.html

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"  
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">  
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"  
            integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"  
            crossorigin="anonymous"></script>  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"  
            integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua"  
            crossorigin="anonymous"></script>  
    <title>Title</title>  
</head>  
<body>  
  
<a href="add_user"><button type="button" class="btn btn-success">添加</button></a>  
<table class="table table-hover">  
    <thead>    <tr>        <th scope="col">序号</th>  
        <th scope="col">账号</th>  
        <th scope="col">密码</th>  
        <th scope="col">日期</th>  
        <th scope="col">操作</th>  
  
    </tr>    </thead>    <tbody>    {% for user in users %}  
    <tr>  
        <th scope="row">{{ user.id }}</th>  
        <td>{{user.username}}</td>  
        <td>{{user.password}}</td>  
        <td>{{user.join_date}}</td>  
        <td>            <a href="/detail?user_id={{ user.id }}"><button type="button" class="btn btn-primary">详情</button></a>  
        </td>  
    </tr>    {% endfor %}  
    </tbody>  
</table>  
</body>  
</html>

detail.html

<!DOCTYPE html>  
<html lang="cn">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"  
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">  
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"  
            integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"  
            crossorigin="anonymous"></script>  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"  
            integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua"  
            crossorigin="anonymous"></script>  
    <title>详情</title>  
</head>  
<body>  
<form method="post" action="detail_update">  
    {% csrf_token %}  
    <div class="form-group">  
        <label for="id" class="sr-only">id</label>  
        <input type="text" readonly class="form-control-plaintext" id="id" name="id" value="{{ user.id }}">  
    </div>    <div class="form-group">  
        <label for="username">用户名</label>  
        <input type="text" class="form-control" id="username" name="username" value="{{ user.username }}">  
    </div>    <div class="form-group">  
        <label for="password">密码</label>  
        <input type="password" class="form-control" id="password" name="password" value="{{ user.password }}">  
    </div>  
    <div class="form-group">  
        <label for="join_date" class="sr-only">创建时间</label>  
        <input type="text" readonly class="form-control-plaintext" id="join_date" name="join_date" value="{{ user.join_date }}">  
    </div>    <button type="submit" class="btn btn-primary">修改</button>  
    <a href="detail_del?user_id={{ user.id }}"><button type="button" class="btn btn-danger">删除</button></a>  
</form>  
</body>  
</html>

addUser.html

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"  
          integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">  
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"  
            integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"  
            crossorigin="anonymous"></script>  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"  
            integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua"  
            crossorigin="anonymous"></script>  
    <title>添加</title>  
</head>  
<body>  
<form method="post" action="add_user_post">  
    {% csrf_token %}  
  
    <div class="form-group">  
        <label for="username">用户名</label>  
        <input type="text" class="form-control" id="username" name="username" required>  
    </div>    <div class="form-group">  
        <label for="password">密码</label>  
        <input type="password" class="form-control" id="password" name="password" required>  
    </div>  
    <button type="submit" class="btn btn-primary">添加</button>  
  
</form>  
</body>  
</html>

posted on 2024-10-15 16:07  ZanderChan  阅读(827)  评论(0)    收藏  举报

导航