• day 19


    上届回顾

      1.Django请求生命周期

        ->URL对应关系(匹配) ->视图函数 ->返回用户字符串

        ->Url对应关系(匹配) ->视图函数 ->打开一个HTML文件,读取内容

      2.创建django project

        django-admin startproject mysite

        mysite

          mysite

            -配置文件

            -url.py

            -settings.py

        cd mysite

        python manage.py startapp cmdb

        mysite

          mysite

            -配置文件

            -url.py

            -settings.py

          cmdb

            -views.py

            -admin.py

            -models.py #创建数据库表

      3.配置

        模板路径

        静态文件路径

          #CSRF

      4.编写程序

        a. url.py

          /index/  ->  func

        b. views.py

          def func(request):

            #包含所有的请求数据

            ....

            #本质上返回字符串

            return HttpResponse('字符串')

            return render(request, 'index.html',{'":"'})#第三个参数替换

            return redirect('URL')

        c. 模板语言

            return render(request, 'index.html',{'li':[11,22,33]})

            

            {%for item in li %}

              <h1>{{item.item}}</h1>

            {%endfor%}

    本节内容

    一 路由系统 URL

       1.path('login/', views.login),

      2.url(r'^register-(d+).html',views.register),

      # url(r'^detail/',views.detail),
      url(r'detail-(d+).html',views.detail)#detail(request,nid)
      3.url(r'detail-(d+)-(d+).html',views.detail)#detail(request,nid,uid) 要按照顺序
      4.
    url(r'detail-(?P<nid>d+)-(?P<uid>d+).html',views.detail)#detail(request,uid,nid) 相当于形参传递数据,可以不按照顺序
            #detail(request,*args,**kwargs) 第3种情况传输到args中,第4种情况传输到kwargs中
      实战:
        url('r'^detail-(d+).html',views.detail),
        
        def func(request,nid,uid):
          pass
        def func(request,*args):
          pass
        def func(request,*args,**kwargs):#**kwargs没有值
          pass

    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'jfkdsajlfdsa/',views.index,name='indexx')
        url(r'^asdffjskla/(d+)/',views.index,name='indexx')

         模板语言:
          {% url “index” %}
          {% url “index” 3 %}#可以灵活使用跳转的页数
        注:
          #当前的URL
          request.path_info

      5 URL分发
        在一级路由下建立二级路由

        url(r'^cmdb/', include("app01.urls")),
        url(r'^monitor/', include("app02.urls"))
        分别在app01和app02应用下新建urls.py文件指定路由

    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),
    ]

     
       6默认值(欠)

       7命名空间(欠)
     
     

    二视图

      1 request.GET#获取数据

      request.POST#提交数据

      request.FILES

      2#checkbox等多选内容

      request.POST.getlist()

      3#上传文件 form标签做特殊设置

      obj = request.FILES.get('ssss')

      obj.name

      f = open(obj.name,mode='wb')

      for item in obj.chunks():

        f.write()

      f.close()

      4 FBV

         function base view

        url.py

          index->函数名

        view.py

          def 函数(request):

            ...

        ===========>

        /index/ ------> 函数名

        /index/ ------> 类名

        Django还支持类名(CBV Class Base View)

          from django.views import View

          class Home(View):

          def get(self, request):

            ....

          def post(self, request):

            pass

        #基于反射来查找 通过base.py中的dispatch来反射

          自己类中也可以添加dispatch,dispatch优先执行,可以通过调用

          urls.py中为 #默认为path,用url需from django.conf.urls import url, include

            url('index/', view.Home.as_view())

      5 装饰器

    三 模板

    四 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. ********** 注意 ***********
    Django默认使用MySQLdb模块链接MySQL
    主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
    import pymysql
    pymysql.install_as_MySQLdb()

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

        #找到app下的models.py

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

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

    # obj = models.UserInfo(username='alex',password='123')
    # obj.save()

    # dic = {'username':'eric', 'password':'66'}
    # models.UserInfo.objects.create(**dic)

    #=======================查询==========================
    # result = models.UserInfo.objects.all()
    #result QuerySet -> Django ->[]
    #[obj, obj, obj]
    # for row in result:
    # print(row.id,row.username,row.password)

    # result = models.UserInfo.objects.filter(username='root',password='123')
    # for row in result:
    # print(row.id,row.username,row.password)

    #=====================删除==============================
    # models.UserInfo.objects.filter(id=3).delete()

    #=======================更新==========================
    # models.UserInfo.objects.all().update(password='666')

    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




    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


    =================== 作业:用户管理 ====================
    1、用户组的增删改查
    2、用户增删该查
    - 添加必须是对话框
    - 删除必须是对话框
    - 修改,必须显示默认值

    3、比较好看的页面

    4、预习:
    http://www.cnblogs.com/wupeiqi/articles/5246483.html

      

  • 相关阅读:
    洛谷 P1387 最大正方形
    洛谷 P1508 Likecloud-吃、吃、吃
    洛谷 P1282 多米诺骨牌
    洛谷 P1880 [NOI1995]石子合并
    P1064 金明的预算方案 (依赖性背包问题)
    caioj 1114 树形动态规划(TreeDP)3.0:多叉苹果树【scy改编ural1018二叉苹果树】
    让Dev C++支持C++11
    1113: [视频]树形动态规划(TreeDP)8:树(tree)(树形dp状态设计总结)
    caioj 1112 树形动态规划(TreeDP)7:战略游戏
    caioj 1111 树形动态规划(TreeDP)6: 皇宫看守 (状态设计)
  • 原文地址:https://www.cnblogs.com/laodong1983/p/9558112.html
Copyright © 2020-2023  润新知