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