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)

转载于:https://www.cnblogs.com/zhuyuanying123--/p/11347073.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值