• 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)
    
    
    
  • 相关阅读:
    JNI接口的使用(简单版)
    Android内核剖析(1)
    Spring 和 Mybatis 整合
    AppStore被拒原因及总结
    iOS开发中,应用内直接跳转到Appstore
    ios 中生成二维码和相册中识别二维码
    IOS开发中(null)与<null>的处理
    融云即时通讯~~
    iOS中菊花。。。
    关于判断邮箱 手机号等一系列的正则表达式
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/11347073.html
Copyright © 2020-2023  润新知