• 网页编程-Django(一)


    业内:

       GET:获取数据

       POST:提交数据

        上传单个数据: request.POST.get(‘’name名‘’)

        上传多选数据: request.POST.getlist('name名')

        上传文件:obj = request.FILES.get('name名')

             obj.chunks()  -生成器

             for item in obj.chunks()

             在form中加入enctype=‘multipart/form-data’

    一、路由系统  FBV   CBV

       1,直接 

          url(r'^index/',views.index),    url(r'^home/',views.Home.as_view())

       2.正则表达式的url   'detail-(d).html'      对应 参数 传入函数

          url(r'detail-(d+).html',views.detail)  

          url(r'detail-(?p<nid>d+)-(?p<uid>d+).html',views.detail)

            def detail(request,*args,**kwargs) 

       3.name

        对url路由关系进行命名,根据此名称构建想要的url

          url(r'^indexdfd',views.insez,name='i1')

            def func(request,*args,**kwargs):

              from django.urls import reverse

              url1 = reverse('i1')

          xx.html  {%  url  "i1"  %}

          

          url(r'^indexdfd/(d+)',views.insez,name='i2')

            def func(request,*args,**kwargs):

              from django.urls import reverse

              url2 = reverse('i2,args=(3,)')

       4.url分发机制

        from django.conf.urls import include

        url(r'cmdb/',include('app01.url'))

        url(r'monitor/',include('app02.url'))

       5.默认值

       6.命名空间

      

    二、视图系统

        返回数据:

            render(request,"模板的文件路径",{数据名:数据})

            redirect('URL')

            HttpResponse('字符串')

     

    四、ORM操作

      django 默认用mysqldb 来连接

      在__init__中加入

      import pymysql

      pymysql.install_as_MySQLdb()

      

      创建表

      1.根据类自动创建数据库表

        #app 中的moudels.py

            class UserInfo(models.model)

            #用户名列,字符串类型,指定长度

            username = models.CharField(max_lenth = 32)

       

        python manage.py makemigrations   #创建表的文件

        python manage.py migrate  #根据文件创建数据库表

      

        如果出现:No changes detected

        在settings 里 installAPP 中  加入 对应的app名称

        如果依然无效,可python manage.py makemigrations <app名称>  #创建表的文件

        在setting 设置 DATABASES  可以选择哪种数据库

        字段:

          字符串类型

          数字类型

          时间类型

          自增(primary_key = True)

        字段参数:

          null        是否为空/    

          default        默认值/

          primary_key    主键

          db_index       索引

          unique        唯一索引

             unique_for_date  对时间做唯一索引

          auto_now     创建时,自动生成时间

          auto_now_add     跟新时,自动生成时间  只用使用obj.save()才有用

          choices      django admin中显示下拉框,避免连表查询

          blank       django admin中表示是否为空

          verbose_name     django admin中显示字段中文

          editable      django admin中是否可被编辑

          error_messages   django admin中提示错误信息

          help_text       django admin中显示帮助信息

          validators      django form,自定义错误信息

      2.根据类对数据库表中的数据进行各种操作

        

        创建数据:

          第一张方式:

          models.UserInfo.objects.create(username='root',password= '123')

          第二种方式:

          obj = models.UserInfo(username='root',password= '123')

            obj.save()

          第三种方式:

          dic = {‘username’:'root','password':'123'}

          models.UserInfo.objects.create(**dic)

        查找数据:

          拿到所有数据:

          result = models.UserInfo.objects.all()  #QuerySet类型 [ obj, obj, obj(id,username,password) ] 

          for row in result:

            print(row.id,row.username,row.password)

          条件查询:

          result = models.UserInfo.objects.filter(username='root')

          for row in result:

            print(row.id,row.username,row.password)

          拿第一个:

          result = models.UserInfo.objects.filter(username='root').first()

          拿个数:

          result = models.UserInfo.objects.filter(username='root').count()

          

        删除内容:

        models.UserInfo.objects.filter(id=4).delete()

        跟新内容:

        models.UserInfo.objects.all().update(password='777')

        models.UserInfo.objects.filter(id=3).update(password='777')

        外键:

        在class UserInfo 中加入:

        user_group =  models.ForeignKey('UserGroup',to_field='uid')

        创建时:

        user_group_id = 1

        或:

        user_group = models.UserGroup.objects.filter(id=1).first()  #对象

        


        外键:
          user_group = models.ForeignKey('UserGroup',to_field = 'uid',default=1)

          存入sql中为:user_group_id

          获取方法:
          user_list = Userinfo.objects.all()
          for row in user_list:
            print(row.user_group_id)
            print(row.user_group) #row.user_group代表一个对象
            #row.user_group_id ==== row.user_group.uid

     

    添加方法:
    	model.Userinfo.objects.create(
    		username = 'root'
    		password = '123'
    		email = '3@qq.com'
    		user_group_id = 1 
    	
    	)
    	
    	或者:
    		model.Userinfo.objects.create(
    		username = 'root'
    		password = '123'
    		email = '3@qq.com'
    		user_group = models.UserGroup.objects.filter(id=1).first() 
    		
    	)
    

      

     外键实例

      一个主机管理的实例:

    #主机管理
    class Host(models.Model):
    	nid = models.AutoField(primary_key) = True
    	hostname = models.CharField(max_length=32,db_index=True)
    	ip = models.GenericIPAddressField(db_index=True)  #加上索引,ipaddressfield已经被generic替换了
    	port = models.IntegerField()
    	business = models.ForeignKey(to = 'Business',to_field='id')
    
    	
    class Business(models.Model):
    	#id
    	caption = models.CharField(max_length=32)
    	code = models.CharField(max_length=32,null=True,default = ='sa')
    

      

    通过外键操作:

    #获取 
    v = models.Business.objects.all()   #以对象方式 
    #或者获取指定列,内部元素是字典:
    v = models.Business.objects.all().values('id','caption')	 #以字典方式
    #获取元祖[(1,运维),(2,开发)]
    v = models.Business.objects.all().values_list('id','caption')  #只能按序列查找
    
    #获取到的一个对象,如果不存在就报错
    models.Business.objects.get(id=1)
    models.Business.objects.filter(id=1)  不存在就为none
    
     外键:
    	v = models.Host.objects.filter(nid__gt=0)
    	v[0].business.caption   ----->通过.进行跨表查询
    	
    	使用下划线获取外键内的值  (以字典形式)
    	v2 =models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b_caption')
    
    
         {{ forloop.counter  }}			循环计数
    	 {{ forloop.counter0  }}
    	 {{ forloop.revcounter  }}
    	 {{ forloop.revcounter0  }}
    	 {{ forloop.last  }}	是否是最后一个循环
    	 {{ forloop.first  }}	是否是第一个循环
    	 
    	 {{ forloop.parentloop  }}	是否是最后一个
    	 
    

      

          

          

          

      

  • 相关阅读:
    opencv::绘制-基本几何
    公共盘访问方法(更改用户登录公共盘)
    testlink数据库访问密码修改
    SQL Server外部链接时报错:Error locating serverInstance specified
    SQL server数据库端口访问法
    python模块之wordcloud
    随性练习:python字典实现文本合并
    python模块之numpy
    python模块之openpyxl扩展
    python模块之openpyxl介绍
  • 原文地址:https://www.cnblogs.com/crazytao/p/7436571.html
Copyright © 2020-2023  润新知