当前位置: 首页 > news >正文

django框架使用

一、app注册:

pycharm使用django框架,注意在注册界面时就创建app,如果没有创建app。就在终端中运行

python manage.py startapp [app名]

然后再在settings.py里注册。

格式为:

[app名].apps.[首字母大写的app名]Config

 二、创建数据表:

1.现在mysql中创建数据库,再在settings.py里连接数据库

settings.py关键代码:


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

顺带一提:调试阶段确保DEBUG设置为True

2.在models.py里创建类(即数据表)

例:

from django.db import models


class user(models.Model):
    name=models.CharField(verbose_name='姓名',max_length=20)
    time=models.DateTimeField(verbose_name='时间',auto_now_add=True)  # 自动添加时间

相当于创建了两列,一个为name一个为time。

然后执行

python manage.py makemigrations
python manage.py migrate

详见https://blog.csdn.net/qq_75247548/article/details/145709159?spm=1001.2014.3001.5501

 三、创建url和view的对应关系

1.在urls.py中创建url对应关系,打开url就会执行对应的视图函数

from django.contrib import admin
from django.urls import path
from app.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index, name='index'),
    path('xg/', xg, name='xg')
]

2.

def index(request):
    user_list = models.user.objects.all()
    return render(request, '2.html', {'form1': user_list})

 获取models.py里的user类(即数据表)的所有数据并加载到2.html中

2.html则可以引用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>111111</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-s1swLUYcLBqAXHj7nWZcBD03oDfaVT4TaOQEaQGnSa65SsyckDHTlfGcB8+LOLkz" crossorigin="anonymous"></script>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
<table class="table table-striped table-dark">
  <thead>
    <tr>
      <th scope="col">id</th>
      <th scope="col">name</th>
      <th scope="col">time</th>
    </tr>
  </thead>
  <tbody>
  {% for i in form1 %}
    <tr>
      <th scope="row">{{ i.id }}</th>
      <td>{{ i.name }}</td>
      <td>{{ i.time }}</td>
    </tr>
  {% endfor %}

  </tbody>
</table>
<a href="{% url 'xg' %}"><button type="button" class="btn btn-outline-primary">修改</button></a>
</body>
</html>

3.html又反向解析到xg的url中,找到views.py里对应的视图函数执行,然后又可以返回一个页面,以此类推。 

 过程:

 tips:提交表单记得

    {% csrf_token %}

四、form.Modelform组件

1.定义

class Usermodel(forms.ModelForm):
    class Meta:
        model = models.user  # models.py里的类名
        fields = ['name']  # 在html会自动生成合适的组件
        widgets = {
            "name": forms.TextInput(attrs={
                "class": "form-control",
                "placeholder": "输入姓名"
            }),
        }
        error_messages = {
            'name': {
                'required': 'Please enter your name.',
            },
        }

 usermodel为定义的类名,继承forms.ModelForm这个django内置库。Meta,fields,widgets等为固定格式,不可修改。

首先指定model=【models.py里定义的数据表名】,

fields指定表单对象name,

fields指定后可以用widgets指定自定义样式为文字输入【TextInput】并添加自定义样式,

error_messages指定如果输入的数据不合规的报错信息

2.使用

当我们定义好之后,如果输入的内容想直接保存在数据库中非常简单。只需要

form = Usermodel(data=request.POST)
        if form.is_valid():
            form.save()
            return render(request, '成功.html')
        else:
            return render(request, '1.html', {'form2': form})

 其中form.is_valid()用于验证表单是否符合数据库规定的格式,如果符合就保存并返回成功。

否则直接返回

五、案例

用上面的知识,我们可以自己搭建一个简单的打卡系统。

因为同一个表单我们需要两种提交按钮,一种用于添加,一种用于删除。并且我们后台需要判断点击的是哪种按钮来执行不同的后台视图函数。因此我们使用JavaScript对我们的按钮进行监听,以执行不同的函数。并且执行完操作我们需要更新数据库并返回页面,就需要用到反向解析。

功能:

演示视频

附源码: 

https://github.com/dubaibubai/dubaibubai.git(未更新)

问题整理:

1.html的button跳转传参:

用a标签嵌套,直接跳转到这个kjxg的url,但是这里先会获取当前页面url的page参数的值,并以url合规的形式附加到href中,接着进入视图函数,可以从url直接获取page值(获取值不一定从表单获取,也可以直接在url中传参),再重定向到index url中

<a href="{% url 'kjxg' i.id %}?page={{ request.GET.page|default:1 }}" class="btn btn-outline-danger btn-sm">删除</a>

def kjxg(request, id):
    # 获取当前页码
    current_page = request.GET.get('page', 1)  # 如果没有页码参数,默认为 1

    # 执行删除操作
    models.user.objects.filter(id=id).delete()

    # 重定向到当前页码
    return redirect(f'{reverse("index")}?page={current_page}')

 

相关文章:

  • 希尔排序:突破插入排序的局限
  • 嵌入式开发:傅里叶变换(4):在 STM32上面实现FFT(基于STM32L071KZT6 HAL库+DSP库)
  • 【nginx】nginx.conf配置详解
  • 编写第一个 C++ 程序 – Hello World 示例
  • 【YOLOv8】YOLOv8改进系列(3)----替换主干网络之ConvNeXt V2
  • Nginx的安装和部署以及Nginx的反向代理与负载均衡
  • 芯旺微KF32A156芯片CANFD过滤配置
  • 【数据结构】顺序表和链表
  • PHP Zip 文件处理指南
  • 计算机毕设-基于springboot的人工智能领域复合型人才校企协同培养管理系统的设计与实现(附源码+lw+ppt+开题报告)
  • xcLeigh 博主:全栈领域优质创作者,博客专家
  • LabVIEW 中 codeGenEngine.llb 工具库
  • 简单理解Oracle中的latch
  • bat命令在b站下载单个音视频
  • 【GO】学习笔记
  • leetcode_动态规划/递归 509. 斐波那契数
  • 【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新
  • ROS2 强化学习:案例与代码实战
  • flutter: table calendar笔记
  • Log | Hugo+PaperMod+Github创建自己的博客网站
  • 新片|《碟中谍8:最终清算》定档5月30日
  • 央视起底“字画竞拍”网络传销案:涉案44亿元,受害者众多
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前
  • 有人倒卖试运营门票?上海乐高乐园:这些票存在无法入园风险
  • 奥古斯都时代的历史学家李维
  • 京东回应外卖系统崩溃:订单暴涨所致,已恢复