django简单建模和增删改操作

有些话、适合烂在心里 提交于 2019-12-06 00:54:53

1.在settings .py文件下修改下面两个配置

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app'  # app为开发文档的文档名字
]


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库类型
        'NAME': 'django',  # 数据库名
        'USER': 'root',  # 账号
        'PASSWORD': 'rock1204',  # 密码
        'HOST': '127.0.0.1',  # IP
        'POST': 3306  # 数据库端口号
    }
}

2.建立模型(models.py

# Create your models here.
from django.db import models


class Article(models.Model):
    # 唯一、不能为空且长度不能超过10字符的title字段
    title = models.CharField(max_length=10, unique=True, null=False)
    desc = models.TextField(null=False)
    is_delete = models.BooleanField(default=1)

    # 自定义表名
    class Meta:
        db_table = 'article'


class Student(models.Model):
    # 最大长度为10个字符,不能为空,唯一
    s_name = models.CharField(max_length=10, unique=True, null=False, verbose_name='id')
    s_age = models.IntegerField(default=20, verbose_name='年龄')
    # auto_now_add:创建数据是,默认赋予创建时间
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    # auto_now: 修改数据时,默认赋予修改的时间
    operate_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')

    # 自定义表名
    class Meta:
        db_table = 'student'

3. 数据增删改操作(views.py

3.1 对数据进行增加操作

3.1.1 方法一:

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
from app.models import Student

def add_stu(request):
    # 新增数据
    # 与flask对比:flask-sqlalchemy:db.session.add(对象)
    # 第一种:save()
    stu = Student()
    stu.s_name = '小明'
    stu.save()
    return HttpResponse('插入数据成功')

3.1.2 方法二:

   def add_stu(request):
    # 第二种:create()
    # flask:Student.query
    # django ORM:Student.object
    Student.objects.create(s_name='小笛', s_age=88)
    return HttpResponse('插入数据成功')

3.2 删除数据:

def del_stu(request):
    # 删除数据
    # stu = Student.objects.filter(s_name='小明').first()
    # stu.delete()
    # 批量删
    Student.objects.filter(s_name='小笛').delete()
    return HttpResponse('删除数据成功')

3.3 更新数据

def update_stu(request):
    print(request)
    # 更新数据
    # save(), auto_now定义的自动会自动更新
    # stu = Student.objects.filter(s_name='小笛').first()
    # stu.s_age = 88
    # stu.save()

    # update(), auto_now定义的字段不会自动更新
    Student.objects.filter(s_name='小笛').update(s_age=70)
    return HttpResponse('更新数据成功')
注意:用save()进行数据更新,auto_now定义的字段会自动更新;而用update()进行数据更新,auto_now定义的字段不会自动更新。除此之外,update()在更新图片路径时(存图片时,存的是图片的路径),也会有问题

4. 定义路由(urls.py

注意:路由地址的最前面没有 ‘/’,只有后面有 ‘/’,如果前后都有 ‘/’,在访问地址时,则需要多加一条斜杠如:127.0.0.1//admin/。

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

from app.views import hello, add_stu, sel_stu, del_stu, update_stu

urlpatterns = [
    path('admin/', admin.site.urls),
    path('add_stu/', add_stu),
    path('sel_stu/', sel_stu),
    path('del_stu/', del_stu),
    path('update_stu/', update_stu),
]

5. 将模型委托给后台管理,可以在后台可视化操作

from django.contrib import admin

# Register your models here.
from app.models import Article, Student

# 将模型Article, Student交给后台进行管理
admin.site.register(Article)
admin.site.register(Student)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!