Django筆記2

上節內容回顧:
    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>

1、路由系統,URL
    一、url(r'^index/', views.index),    
       url(r'^home/', views.Home.as_view()),
    二、url(r'^detail-(\d+).html', views.detail),  
    三、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、命名空間(欠)
    
    
2、視圖
    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()
    
    四、FBV & CBV
       function base view
       
        url.py
            index -> 函數名
            
        view.py
            def 函數(request):
                ...
        ====/index/ -> 函數名
            
        /index/ ->====》
        
        建議:二者都用
        
    5、裝飾器
        欠

    
3、模板
    
    

4、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
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
相關文章
相關標籤/搜索