• Django(二)


    一、路由系统,URL
        1、url(r'^index/', views.index),   
             url(r'^home/', views.Home.as_view()),
        2、url(r'^detail-(d+).html', views.detail), url(r'^detail-(d+)-(d+)', views.detail),
        3、url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html', views.detail)

           PS:
                def detail(request, *args,**kwargs):
                    pass

           实战:
                a.
                    url(r'^detail-(d+)-(d+).html', views.detail),

                    def func(request, nid, uid):

                        pass

                    def func(request, *args):
                        args = (2,9)


                    def func(request, *args, **kwargs):
                        args = (2,9)

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

                    def func(request, nid, uid):
                        pass

                    def funct(request, **kwargs):
                        kwargs = {'nid': 1, 'uid': 3}

                    def func(request, *args, **kwargs):
                        args = (2,9)
        4、 name

            对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****

            url(r'^asdfasdfasdf/', views.index, name='i1'),
            url(r'^yug/(d+)/(d+)/', views.index, name='i2'),
            url(r'^buy/(?P<pid>d+)/(?P<nid>d+)/', views.index, name='i3'),



            def func(request, *args, **kwargs):
                from django.urls import reverse

                url1 = reverse('i1')                              # asdfasdfasdf/
                url2 = reverse('i2', args=(1,2,))                 # yug/1/2/
                url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/


            xxx.html

                {% url "i1" %}               # asdfasdfasdf/
                {% url "i2" 1 2 %}           # yug/1/2/
                {% url "i3" pid=1 nid=9 %}   # buy/1/9/

            注:
                # 当前的URL
                request.path_info
        5、多级路由

            project/urls.py
                from django.conf.urls import url,include
                from django.contrib import admin

                urlpatterns = [
                    url(r'^cmdb/', include("app01.urls")),
                    url(r'^monitor/', include("app02.urls")),
                ]

            app01/urls.py
                from django.conf.urls import url,include
                from django.contrib import admin
                from app01 import views

                urlpatterns = [
                    url(r'^login/', views.login),
                ]

            app02/urls.py
                from django.conf.urls import url,include
                from django.contrib import admin
                from app02 import views

                urlpatterns = [
                    url(r'^login/', views.login),
                ]


    二、视图
        1、获取用户请求数据
            request.GET
            request.POST
            request.FILES
            PS:
                GET:获取数据               
                POST:提交数据

        2、checkbox等多选的内容
            request.POST.getlist()
        3、上传文件
            # 上传文件,form标签做特殊设置(enctype="multipart/form-data")
            obj = request.FILES.get('fafafa')
            obj.name
            f = open(obj.name, mode='wb')
            for item in obj.chunks():
                f.write(item)
            f.close()

        4、FBV & CBV
           function base view
           class base view

            url.py
                index -> 函数名

            view.py
                def 函数(request):
                    ...
            ====》
            /index/ -> 函数名

            /index/ -> 类

            ====》

            建议:两者都用


    三、模板



    四、ORM操作
        select * from tb where id > 1
        # 对应关系
        models.tb.objects.filter(id__gt=1)
        models.tb.objects.filter(id=1)
        models.tb.objects.filter(id__lt=1)

        创建类

        a. 先写类
            from django.db import models

            # app01_userinfo
            class UserInfo(models.Model):
                # id列,自增,主键
                # 用户名列,字符串类型,指定长度
                username = models.CharField(max_length=32)
                password = models.CharField(max_length=64)

        b. 注册APP

            INSTALLED_APPS = [
                'django.contrib.admin',
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.sessions',
                'django.contrib.messages',
                'django.contrib.staticfiles',
                'app01',
            ]
        c. 执行命令
            python manage.py  makemigrations
            python manage.py  migrate

        d. ********** 注意 ***********
      mysql数据库
      DATABASES = {
          'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME':'dbname',
          'USER': 'root',
          'PASSWORD': 'xxx',
          'HOST': '',
          'PORT': '',
          }

      }
            Django默认使用MySQLdb模块链接MySQL
            主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
                import pymysql
                pymysql.install_as_MySQLdb()

        1. 根据类自动创建数据库表
            # app下的models.py

            python manage.py  makemigrations
            python manage.py  migrate

            字段:
                字符串类型
                数字
                时间
                二进制
                自增(primary_key=True)

            字段的参数:
                null               -> db是否可以为空
                default            -> 默认值
                primary_key        -> 主键
                db_column          -> 列名
                db_index           -> 索引
                unique               -> 唯一索引
                unique_for_date    ->
                unique_for_month
                unique_for_year
                auto_now           -> 创建时,自动生成时间
                auto_now_add       -> 更新时,自动更新为当前时间

                    # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
                    # obj = UserGroup.objects.filter(id=1).first()
                    # obj.caption = "CEO"
                    # obj.save()

                choices              -> django admin中显示下拉框,避免连表查询
                blank             -> django admin是否可以为空
                verbose_name      -> django admin显示字段中文
                editable          -> django admin是否可以被编辑
                error_messages    -> 错误信息欠
                help_text         -> django admin提示
                validators          -> django form ,自定义错误信息(欠)


                创建 Django 用户:python manage.py createsuperuser

              数据库的基本操作:
              from app01 import models
          def orm(request):
        
       
                  a.创建
                   models.UserInfo.objects.create(username = "root",password = '123')
                   return HttpResponse('orm')
                 b.删
              models.UserInfo.objects.filter(username='eric').delete()
              return HttpResponse(orm)
             c.改
         models.UserInfo.objects.all().update(password='111')
         models.UserInfo.objects.filter(id=2).update(password='555')
              return HttpResponse(orm)

               d.查
            result = models.UserInfo.objects.all() --->查全部
            result = models.UserInfo.objects.filter(username='root')  --->查name是root的
            for row in result:
                print(row.id,row.username,row.password)
            print(result)
            return HttpResponse(orm)

                 


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

            一对多:

                a. 外检
                b.
                    外键字段_id
                c.
                    models.tb.object.create(name='root', user_group_id=1)

                d.

                    userlist = models.tb.object.all()
                    for row in userlist:
                        row.id
                        row.user_group_id
                        row.user_group.caption

  • 相关阅读:
    Sprint2-3.0
    6/13 Sprint2 看板和燃尽图
    6/8/9/10/11 Sprint2 看板和燃尽图
    相互观看与评价
    复利计算器结对2.0
    汉堡包1.0
    复利计算5.0 结对
    《构建之法》第四章 二人合作 读后感
    复利计算器单元测试测试报告
    实验一、命令解释程序的编写实验
  • 原文地址:https://www.cnblogs.com/manger/p/6185551.html
Copyright © 2020-2023  润新知