19-django【orm】總結

上節內容回顧:

1、Django請求生命週期

    -> URL對應關係(匹配) -> 視圖函數 -> 返回用戶字符串
    -> URL對應關係(匹配) -> 視圖函數 -> 打開一個HTML文件,讀取內容

2、創建django projcet

    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', {''})
            retrun redirect('URL')

    c. 模板語言
        return render(request, 'index.html', {'li': [11,22,33]})

        {% for item in li %}
            <h1>{{item}}</h1>
        {% endfor %}


        ***********  索引用點 **********
        <h2> {{item.0 }} </h2>

一、路由系統,URL

1、url(r'^index/', views.index),    
   url(r'^home/', views.Home.as_view()),
2、url(r'^detail-(\d+).html', 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),
        ]

6、默認值(欠)

7、命名空間(欠)

二、視圖

1、獲取用戶請求數據

    request.GET
    request.POST
    request.FILES
    PS:
        GET:獲取數據                
        POST:提交數據

2、checkbox等多選的內容

    request.POST.getlist()

3、上傳文件

    # 上傳文件,form標籤做特殊設置
    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

    url.py
        index -> 函數名

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

    /index/ -> 類

    ====》

    建議:兩者都用

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

    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
發佈了74 篇原創文章 · 獲贊 90 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章