三、2:使用orm制作表图的增、删、改、查
admin
2023-07-15 13:22:02
0

一、首先配置orm

1、首先在settings.py中配置(数据库需要手动提前先建好)

注释以下内容(47行)

# 'django.middleware.csrf.CsrfViewMiddleware',
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'orm_db1',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'USER':'root',
        'PASSWORD':'mariadb.123',
    }
}

2、在__init__.py中添加以下内容:

import pymysql
pymysql.install_as_MySQLdb()

二、在项目中配置

1、在models.py中创建用户表与字段填写

from django.db import models

class User(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    address = models.CharField(max_length=32)
    phone=models.CharField(max_length=64,default='120')
#______________ 分割线,另做其他使用___________________________
class Publish(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    email = models.EmailField()
    addr = models.CharField(max_length=64)

class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    address = models.CharField(max_length=32)

class Book(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    # 21.38
    price = models.DecimalField(max_digits=5, decimal_places=2)
    # 一对多的关系确立,关联字段写在多的一方,orm自动在publish后面加id,publish_id
    publish = models.ForeignKey(to='Publish', to_field='id')
    # 多对多关系,orm会自动创建第三张表
    authors = models.ManyToManyField(to='Author')

1 python3 manage.py makemigrations   ----记录一下数据库的变化

2 python3 manage.py migrate          ----将变化同步到数据库中

2、在总路由添加以后可能要添加的功能路由地址与对应的视图

from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^user_list/',views.user_list),
    url(r'^delete/',views.delete),
    url(r'^add/',views.add),
    url(r'^edit/',views.edit),
]

3、在视图功能文件中填写:views.py

from django.shortcuts import render,HttpResponse,redirect
from app01 import models
# Create your views here.
def user_list(request):
    if request.method=='GET':
        # 查询user表中所有数据.--相当于sql select * from app01_user;
        # 返回结果是QuerySet对象(先当成列表)
        # [user1,user2]
        # 单表查询所有用户
        ret=models.User.objects.all()
        # print(type(ret))
        # for i in ret:
        #     print(type(i))
        #     print(i.name)
        return render(request,'user_list.html',{'user_list':ret})
def delete(request):
# get请求携带参数:http://127.0.0.1:8000/deleteuser/?id=1
    if request.method=='GET':
       # 后台取值:request.GET.get('id')
        id=request.GET.get('id')
        # orm删除记录
        models.User.objects.filter(id=id).delete()
        return redirect('/user_list/')
def add(request):
    if request.method=='GET':
        return render(request, 'add.html')
    elif request.method=="POST":
            # 前台post提交的数据取值:
        name=request.POST.get('name')
        pwd=request.POST.get('password')
        addr=request.POST.get('addr')
        phe=request.POST.get('phone_a')
      # 方式一
      # user=models.User(name=name,password=pwd,address=addr)
      # user.save()   #写入数据库
        # 方式二
        models.User.objects.create(name=name,password=pwd,address=addr,phone=phe)

        return redirect('/user_list/')

def edit(request):
    if request.method=='GET':
        id=request.GET.get('id')
        # orm查询单条数据
        user=models.User.objects.filter(id=id).first()
        return render(request,'edit.html',{'user':user})
    if request.method=='POST':
        id=request.POST.get("id")
        name = request.POST.get('name')
        pwd = request.POST.get('password')
        addr = request.POST.get('addr')
        phe = request.POST.get('phone_a')
        # orm的修改
        models.User.objects.filter(id=id).update(name=name,password=pwd,address=addr,phone=phe)
        return redirect('/user_list/')

4、在templates目录中创建以下html文件

add.html

edit.html

user_list.html


add.html




    
    新增用户



    

用户名: 

    

密码: 

    

地址: 

    

电话:

    

edit.html




    
    Title



    

    

用户名: 

    

密码: 

    

地址: 

    

电话:

    

user_list.html




    
    Title





    id
    name
    password
    address
    phone
    delete
    add
    edit


    
        {% for user in user_list %}
            
                {{ user.id }}
                {{ user.name }}
                {{ user.password }}
                {{ user.address }}
                {{ user.phone }}
                删除    
                编辑
                新增用户
            
        {% endfor %}

    
    


总结:

1 orm 创建表,新增字段,修改,删除字段,不能创建数据库
		-字段属性phone=models.CharField(max_length=64,null=True)
		-null=True 代表该列可以为空
2 数据的增删改查
		-增(1):User.objects.create(address='')
		-增(2):实例化产生一个user对象,user对象的save方法
		-删:User.objects.filter(id=1,name='lqz').first().delete()
		-删:User.objects.filter(id=1,name='lqz').delete()
		-改:User.objects.filter(id=1,name='lqz').update()
		-查:User.objects.all()
		    user=User.objects.filter(name='lqz')
			user.name
3 前后台交互
-id=1&name='lqz'&
		
			

用户名: 

密码: 

地址: 

4 django生命周期		
	5 一对多,多对多
		-publish_id
		-publish=models.ForeignKey(to='Publish', to_field='id')
		book.publish_id
		book.publish
		多对多:(自动创建第三张表)
		authors = models.ManyToManyField(to='Author')





相关内容

热门资讯

特朗普:正致力于与伊朗达成协议... 特朗普在《纽约邮报》一档播客访谈节目中称,他正与伊朗磋商一项协议,伊朗已同意不再谋求拥有核武器。他表...
不接壤的日菲为何偷划海界? 日菲近日发表联合声明,宣称就“划定两国专属经济区和大陆架的海洋边界”启动正式谈判。两个隔海相望的国家...
凤凰晚报丨从钳工到老戏骨,魏宗... 今日人物【从钳工到老戏骨,魏宗万用一生诠释“戏比天大”】6月1日,表演艺术家魏宗万在上海逝世,享年8...
科威特称伊朗袭击致63人受伤 科威特卫生部门3日称,伊朗当天对科威特的袭击已造成63人受伤,相关部门已启动紧急应对预案,并在全国范...
日本标榜“和平国家”却行扩军备... 今年是东京审判开庭80周年,世界正回望历史、反思战争罪责、捍卫二战后来之不易的国际秩序之际,日本却迈...
浙江杨梅即将大规模上市,如何破... “我们现在的压力很大。”5月底,浙江余姚杨梅产区丈亭镇副镇长林宇站在一片杨梅林前对第一财经表示,当地...
致5死2伤!韩国就韩华航空航天... 【环球网报道 记者 姜蔼玲】据韩联社6月1日报道,针对位于韩国大田的韩华航空航天公司发生爆炸致7人伤...
黄河科技学院2026年招生简章 长按图片识别二维码或点击 “阅读原文” 查看电子招生简章。
医路起航,从“心” 开始!黄河... 6月1日上午,黄河科技学院附属医院2022级临床医学本科实习生入院岗前培训在大医讲堂顺利举办。院领导...
问题居然在实体卡槽上!美版iP... 6月2日消息,日前,又有博主提前把还没发布的iPhone 18 Pro电池参数给曝光了出来,根据爆料...