ORM单表操作

本文目录

一.ORM简介

二.全局配置

三.搞搞搞


一.ORM简介

.ORM是“对象-关系-映射”的简称

.MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以,轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动.


二.全局配置

.单表是相对简单的Django项目,我们再次进行对单表的增删改查操作,话不多说,项目开始。

1.setting.py 文件配置静态路径。

setting.py

STATIC_URL = ‘/static/‘
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,‘static‘),
]

2.同时禁用setting.py文件里面 一个Csrf中间件。

setting.py

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‘,
]

3.我们在这里使用MySQL数据库,顺便先配置下。

setting.py

DATABASES = {
    # ‘default‘: {
    #     ‘ENGINE‘: ‘django.db.backends.sqlite3‘,
    #     ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),
    # }
‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘db3‘, #数据库名称
        ‘HOST‘:‘127.0.0.1‘, #地址,默认
        ‘PORT‘:3306,
        ‘USER‘:‘root‘,
        ‘PASSWORD‘:‘‘, #密码,我没设密码,用自己设置的密码
    }
}

4.在项目目录下找到__init__.py文件.(切记是在本项目的目录下)。这句话的作用是使用MySQL代替

sqlite3数据库。

__init__.py

import pymysql
pymysql.install_as_MySQLdb()
总结:到此我们的项目已经基本配置完成了,需要注意的就是__init__.py文件的配置位置。

一。接下来就是写项目了。项目的基本流程是。URL进去--视图函数(返回相对应的页面)--前端返回数据--视图函数处理数据--保存进数据库。

.1.既然是要操作表格,那就必须要有表格是不是,那我们就先弄出一个表格出来,怎么弄呢??  别急,在弄出表格之前我们还有一步要走,生成app,这个可不是手机里的app哦。 指令
python manage.py startapp app01

这时就生成一个app了。我们生成表格就是在app里面的models文件里面编写。.2 编写models.pymodels.py
from django.db import models

# Create your models here.

class Book(models.Model):
    nid=models.AutoField(primary_key=True)
    name=models.CharField(max_length=64)
    age=models.IntegerField()
    hobby=models.CharField(max_length=32)
    date=models.DateField()
    price=models.DecimalField(max_digits=8,decimal_places=2)

.3.进行数据迁移命令:

python manage.py makemigrations
python manage.py migrate

.4.可以看到在app01的migrations文件里多出0001_initial.py这个文件,这个就是迁移记录。

.5.我们这里用可视化工具来看,步骤如下。

 。1.pychram右上角点击打开“Database”。

 。2.点击加号选择MySQL。

。3.下载驱动,配置相关信息。

。4.配置完成后点击“Test Connection”连接。这个就可以直观的看到表格吗,如下图:

二.写代码了.

 1>.配置urls.py

urlpatterns = [
    path(‘admin/‘, admin.site.urls),
    path(‘look_book/‘, views.look_book),  #查
    path(‘add_book/‘, views.add_book),   #增
    path(‘delete_book/‘, views.delete_book),  #删
    path(‘edit_book/‘, views.edit_book),   #改
    # path(‘index/‘, views.index),
]

 2>.视图:

view.py

# 增加
def add_book(request):
    if request.method==‘POST‘:
        nid=request.POST.get(‘nid‘)
        name=request.POST.get(‘name‘)
        age=request.POST.get(‘age‘)
        hobby=request.POST.get(‘hobby‘)
        date=request.POST.get(‘date‘)
        price=request.POST.get(‘price‘)

        Book.objects.create(nid=nid,name=name,age=age,hobby=hobby,date=date,price=price)
        return redirect(‘/look_book/‘)
    return render(request, ‘add_book.html‘)

html

#增<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <title>添加用户</title>
</head>
<body>
    <div class="row">
        <div class="col-md-3 col-md-offset-4">
        <h4 class="col-md-offset-4">添加用户</h4>
            <form action="" method="post">
                <p>用户名<input type="text" name="name" class="form-control"></p>
                <p>年龄<input type="text" name="age" class="form-control"></p>
                <p>爱好<input type="text" name="hobby" class="form-control"></p>
                <p>日期<input type="date" name="date" class="form-control"></p>
                <p>价格<input type="text" name="price" class="form-control"></p>
                <p><input type="submit" value="提交" class="form-control btn btn-success"></p>
            </form>
        </div>
    </div>
</body>
</html>

效果图:



#查

view.py

# 查看
def look_book(request):
    look_book=Book.objects.all()
    return render(request,‘look_book.html‘,{‘look_book‘:look_book})

html

#查
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <title>添加用户</title>
</head>
<body>
   <div class="row">
        <div class="container">
           <div class="col-md-8 col-md-offset-2">
               <h4 class="col-md-offset-4">用户信息</h4>
               <table class="table table-striped table-hover table-bordered">
                   <thead>
                        <tr>
                            <th>id</th>
                            <th>名字</th>
                            <th>年龄</th>
                            <th>爱好</th>
                            <th>日期</th>
                            <th>价格</th>
                            <th>操作</th>
                        </tr>
                   </thead>
                   <tbody>
                        {% for book in look_book %}
                            <tr>
                                <td>{{ book.nid }}</td>
                                <td>{{ book.name }}</td>
                                <td>{{ book.age }}</td>
                                <td>{{ book.hobby }}</td>
                                <td>{{ book.date|date:"Y-m-d" }}</td>
                                <td>{{ book.price }}</td>
                                <td>
                                    <a href="/edit_book/?nid={{ book.nid }}" class="btn btn-success">编辑</a>
                                    <a href="/delete_book/?nid={{ book.nid }}" class="btn btn-danger">删除</a>
                                </td>
                            </tr>
                        {% endfor %}
                   </tbody>
               </table>
           </div>
        </div>
   </div>
</body>
</html>

效果图:



#改

view.py

# 改

def edit_book(request):
    if request.method==‘POST‘:
        nid=request.POST.get(‘nid‘)
        name=request.POST.get(‘name‘)
        age=request.POST.get(‘age‘)
        hobby=request.POST.get(‘hobby‘)
        date=request.POST.get(‘date‘)
        price=request.POST.get(‘price‘)
        Book.objects.filter(pk=nid).update(name=name,age=age,hobby=hobby,date=date,price=price)

        return redirect(‘/look_book/‘)

    nid=request.GET.get(‘nid‘)
    editbook=Book.objects.filter(nid=nid).first()
    return render(request,‘edit_book.html‘,{‘editbook‘:editbook})

html

#改<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <title>编辑界面</title>
</head>
<body>
    <div class="row">
        <div class="col-md-4 col-md-offset-3">
            <h4 class="col-md-offset-4">编辑界面</h4>
            <form action="" method="post">
                <p> <input type="hidden" name="nid" value="{{ editbook.nid }}"></p>
                <p>姓名 <input type="text" name="name" value="{{ editbook.name }}" class="form-control"></p>
                <p>年龄 <input type="text" name="age" value="{{ editbook.age }}" class="form-control"></p>
                <p>爱好 <input type="text" name="hobby" value="{{ editbook.hobby }}" class="form-control"></p>
                <p>日期 <input type="date" name="date" value="{{ editbook.date }}" class="form-control"></p>
                <p>价格 <input type="text" name="price" value="{{ editbook.price }}" class="form-control"></p>
                <p><input type="submit" value="提交" class="form-control btn btn-success"></p>
            </form>
        </div>
    </div>
</body>
</html>

效果图:



#删

view.py

# 删
def delete_book(request):

    nid=request.GET.get(‘nid‘)
    Book.objects.filter(nid=nid).delete()
    return redirect(‘/look_book/‘)

总结:通过输入相对应的URL,进入视图相对应的功能中并返回相应的页面。在前端页面中做数据修改后再传回后端,后端拿到数据后做相应的处理,并且把数据写进数据库。

原文地址:https://www.cnblogs.com/wcx123-blogs/p/11470231.html

时间: 2024-07-29 08:06:36

ORM单表操作的相关文章

17-2 orm单表操作和多表操作

参考:https://www.cnblogs.com/liwenzhou/p/8660826.html 一  ORM单表操作 1 增删改查 1 1. 查询 2 1. 查所有 3 models.Publisher.objects.all() 4 2. 查某个具体的记录 5 models.Publisher.objects.get(id=1) --> 注意查询条件不成立就报错 6 2. 删除一条记录 7 models.Publisher.objects.get(id=1).delete() 8 3.

Django框架05 /orm单表操作

目录 Django框架05 /orm单表操作 昨日内容回顾 今日内容 orm单表操作 对象关系映射(object relational mapping) 1.orm介绍 2.增: 3.时间问题 4.删 5.改 6.批量插入 -- bulk_create 7.查询api 8.基于双下划线的模糊查询 -- filter双下划线查询 9.总结 总结1 总结2 Django框架05 /orm单表操作 昨日内容回顾 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承

9.17 模型层 ORM 单表操作

1 创建模型 创建名为book的app,在book下的models.py中创建模型: from django.db import models # Create your models here. class Book(models.Model): id=models.AutoField(primary_key=True) title=models.CharField(max_length=32) state=models.BooleanField() pub_date=models.DateF

ORM 单表操作查询 多表操作查询及增删改查

------------------------------------------只有对前途乐观的人,才能不怕黑暗,才能有力量去创造光明.乐观不是目的,而是人生旅途中的一种态度. 多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期

Django学习【第6篇】:Django之ORM单表操作(增删改查)

django之数据库表的单表查询 一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80) Frank_obj.save() # 方式二: models.Student.objects.create(name ="海燕",co

django orm单表操作

orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执行 增: 方式1: new_obj = models.UserInfo( id=2, name='小猿1', bday='2019-09-27', checked=1, ) new_obj.save() 方式2: # ret 是创建的新的记录的model对象(重点) ret = models.UserInfo.objects.create( name='小猿2', bday='2019-08-

Django开发:(3.1)ORM:单表操作

MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动 ORM是"对象-关系-映射"的简称. Mysql中的表对应python中的类,表的字段对应类的属性,表的记录对应类的实例化的对象 单表操作 创建表 1. 创建模型 创建名为app01的app,在app01下的models.py中创建模型: from dj

Django学习手册 - ORM 数据表操作

queryset 数据类型介绍 QuerySet与惰性机制 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行. QuerySet特点: <1>  可迭代的 <2>  可切片 <3>  惰性计算和缓存机制 例: info=models.table_name.objects.all()[0:5] #切片 info= models.table

model,单表操作

一. model Django提供了一个抽象层(“Model”)来构建和管理Web应用程序的数据. django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 关系对象映射(Object Relational Mapping,简称ORM),  它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动. 二. 单表操作 <一>. 表的创建