zoukankan      html  css  js  c++  java
  • Django 的orm

    各个文件夹代表的

    
    Migration:模型操作的迁文件
    
    admin:django admin的后台管理的文件  
    
    apps:注册文件
      
    models.py:模型生成的代码-
    
    views.py:视图文件
    
    

    Manage.py startapp

    路由系统>

    1.创建app
    	两种方式:pycharm创建django。加上app名字,
      				python manage.py startapp + 名字
    2.路由的分组
    	a:将所有的业务逻辑写到app中的views里
      	urls.py:
      b:使用incloud来进行app分组
        在其他剩余的app中,添加urls.py文件
        在这个app的views中,添加业务处理逻辑
    3.路由的分发
    	A:正则表达式的匹配
      urlroutes:
        url(r'^test/(w+)(w+)',view.test)
        url(r'^test1/(?P<id>w+)(?P<name>w+)',view.test1)
        
     	views.py:
        def test(request,name,id):
          print(id,name)
          return Httpresponse('test')
        def test1(request, name, id):
    			print(id, name)
    			return HttpResponse('test')
        ?p的约束,传参的时候,会根据顺序来获取参数对应的值
        没有约束,传参的时候,会固定的将获取的值传给对应的约束
       (自定义404页面)----->
      url(r'^',views.notfound),
      views:
        def notfound(request):
          return render(request,'404.html')
        
        
        
      B:  反向路由解析:
        
        urls.py:
          url(r'^logindadadwd',views.login,name='xxx')
        login.html:
          <form action="{%url 'xxx' %}" method='post'></form
       *** 自定义的 name='m1'
        {% url 'm1' %}
        
        
        
    
    -FEV(function based views)
     使用函数处理业务逻辑。称作fev
    
    -CBV(class based  views)
     使用类处理业务逻辑
      
      urls.py:
    				url(r'^login/', views.Login.as_view()),
    				
    			views.py:
    				from django.views import View
    				class Login(View):
    
    					def get(self, request):
    
    						return render(request, "login.html")
    
    					def post(self, request):
    						pass
    						
    				当请求过来的时候, 会优先判断你的请求方法是GET还是POST, 如果是GET请求的话, 走GET函数, 反之, 走POSt函数
    			
    			Http的请求方法:
    			
    				'get',:获取信息的
    				'post':提交数据用post方式
    				'put', :更新数据 
    				'patch', :部分更新
    				
    				'delete':删除
    			
    			form表单的方式, 只支持GET/POST
    			ajax的方式, 全部支持
    				type: "POST" 、get、delete
      
    **加函数 .as_view() 另外需要引入view
      
    

    django的orm(模型model)>

    1.创建模型的步骤
    	a:需要创建一个数据库
      b:settings中配置连接
      	DATABASES = {
    				# 'default': {
    				#     'ENGINE': 'django.db.backends.sqlite3', ### 非常小型的文件数据库
    				#     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    				# }
    
    				'default': {
    					'ENGINE': 'django.db.backends.mysql',
    					'NAME': 'test',  ## 数据库名称
    					'USER': 'root',
    					'PASSWORD': '',  ## 安装 mysql 数据库时,输入的 root 用户的密码
    					'HOST': '127.0.0.1',
    				}
    			}
      c:在对应的app中的__init__文件下面:
      	import pymysql
    			pymysql.install_as_MySQLdb()
    		
    		d. INSTALLED_APPS = [
    				'django.contrib.admin',
    				'django.contrib.auth',
    				'django.contrib.contenttypes',
    				'django.contrib.sessions',
    				'django.contrib.messages',
    				'django.contrib.staticfiles',
    				'app01',
    				'classes'
    			]
    
    2.o r m基本的增删改查
    	a:创建表
      	from django.db import models
    
    			# Create your models here.
    			### 一个类对应一张表
    			class UserInfo(models.Model):
    				id = models.AutoField(primary_key=True)
    				name = models.CharField(max_length=32, null=True)
    				age = models.CharField(max_length=32, null=True)
         ###一对多的关系
        	ut =models.ForeignKey('UserType',null=True)不写的话默认自动关联id      ut这个变量关联的是usertype一行一行的数据
          to--关联哪张表。 to_field 关联的字段
          
    	
    			将类转换成实际的表:
    				
    				python manage.py  makemigrations  ### 生成迁移文件
    				python manage.py  migrate   ### 生成实际的表
            
    b:查
     ###单表查询   
      res =models.Userinfo.objects.all()
    <Queryset 里面是个列表 包含的是对象
    print(res)
    for obj in res:
      print(obj.username,obj.age)
     ** values
     res =models.Userinfo.objects.values('username','age')
      print(res)
      <Queryset 里面是列表里面套字典
     ** value_list
    res =models.Userinfo.objects.value_list('username','age')
    	print(res)
      <Queryset 里面是列表套元祖
     ** first --第一个值
    res =models.Userinfo.objects.first()
    print(res)--->一个个单个的对象
     **加条件
      res =models.Userinfo.objects.filter(id__gt=3)==代表where id>3
    
    c:增加
    第一种添加方式  
     models.Userinfo.objects.create(username='kkk',age=12,ut_id=3)
    第二种添加方式
    userinfo={'username':'ddd','age':'23','ut_id':2}
    models.Userinfo.objects.create(**userinfo)
    ##增加多条记录
    
    d:删除
    models.userinfo.objects.filter(id=3).delete()
    
    e:更新
      
    models.userinfo.objects.filter(id=3).update(username='xxx')
    
    3.正反向查询
    ut是一个对象,他对应的就是usertype一行的数据
    既然是个对象,也可以点出来
    
    正向查询>>>>
    
    ---- ut 从userinfo 到usertype查询数据(子到父)
    
     ## 获取某一用户所对应的数据类型
    res =models.UserInfo.objects.all()
    for obj in res:
      print(obj.username,obj.age,obj.ut.title)##跨到usertype的title
     
      
    
     *************神奇的双下划线----(非常实用)
    \
    res =models.userinfo.objects.values('username','age','ut__title')
    print(res)
    \
    res =models.userinfo.objects.value_list('username','age','ut__title')
    
    反向查询>>>>
    
    ---- ut 从 usertype 到 userinfo 查询里面的数据
    
    需求:-获取所有类型下面的用户
    
    res =models.usertype.objects.all()
    ###表名小写_set
    for obj in res:
      
      	print(obj.id,obj.title,obj.userinfo_set.all())
     查询的那张表。表名小写 下划线set
    ### obj.userinfo_set.all() 相当于models.Userinfo.objects.filter(ut_id=1).all()
    
    
    ***********神奇的双下划线
    ###使用表名小写_ _字段名
    res =models.UserType.objects.values('title','userinfo__id','userinfo__age','userinfo__username')
    print(res)
    
    
    
  • 相关阅读:
    1451. Rearrange Words in a Sentence
    1450. Number of Students Doing Homework at a Given Time
    1452. People Whose List of Favorite Companies Is Not a Subset of Another List
    1447. Simplified Fractions
    1446. Consecutive Characters
    1448. Count Good Nodes in Binary Tree
    709. To Lower Case
    211. Add and Search Word
    918. Maximum Sum Circular Subarray
    lua 时间戳和时间互转
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/11347073.html
Copyright © 2011-2022 走看看