一、路由系統URL
1、普通URL對應
url(r'^login/',views.login)
2、正則匹配
url(r'^index-(\d+).html',views.index) url(r'^index-(?P<nid>\d+)-(?P<uid>\d+).html',views.detail) def detail(request,*args,**kwargs): pass
3、name
url(r'^login/',views.login,name='login_01') url(r'^login/(\d+)',views.login,name='login_01') 模板內容: {% "login_01" %} {% "login_01" 3 %}
4、include路由分發
需要匯入inclue: from django.conf.urls import include, url url(r'^cmdb/',include("app01.urls"))
二、檢視VIEWS
1、獲取資料
request.POST.get() ##獲取單個文字值 request.POST.getlist() ##獲取多個問本值 request.FILES.get() ##獲取上傳檔案內容 <input type='file' name='file_name'> obj = request.FILES.get('file_name') path = os.path.join('upload', obj.name) f = open(path, mode="wb") for i in obj.chunks(): f.write(i) f.close()
2、FBV&CBV
FBV:function based views CBV:class based views
三、ORM操作
關係物件對映:Object Relational Mapping,用於實現物件導向程式語言裡不同型別系統之間的資料之間的轉換。
所有資料庫相關定義在models.py裡,然後利用python manage.py makemigrations /python manage.py migrate進行資料庫建立
1、建立類
a.根據類自動建立資料庫表(models.py)
from django.db import models # Create your models here. class UserInfo(models.Model): ##隱含建立id列,主鍵自增 username=models.CharField(max_length=32) password=models.CharField(max_length=64)
b.根據類對資料庫中的資料進行各種操作(views.py)
(1)增加資料:
from cmdb import models def orm(request): models.UserInfo.objects.create( username='root',password='123') return HttpResponse('orm') 或者 obj=models.UserInfo(username='root',password='123') obj.save()
(2)查詢資料:
已物件形式反回[obj(col1,col2,col3),obj(col1,col2,col3),obj(col1,col2,col3)]
result=models.UserInfo.objects.all() for row in result: print(row.id,row.username,row.password) result=models.UserInfo.objects.filter(username='root') a.列表形式 v1=models.UserInfo.objects.all() html渲染方式: {% for row in v1 %} {{row.id}}-{{row.username}}-{{row.code}} {% endfor %}
b.字典形式
v2=models.UserInfo.objects.all().values('id','username')
html渲染方式:
{% for row in v2 %}
{{row.id}}-{{row.username}}}
{% endfor %}
c.元組形式
v3=models.UserInfo.objects.all().value_list('id','username')
html渲染方式:
{% for row in v3 %}
{{row.0}}-{{row.1}}
{% endfor %}
return render(request,'index.html',{'v1':v1,'v2':v2,'v3':v3})
(3)刪除資料
models.UserInfo.objects.filter(username='root').delete()
(4)更新資料
models.UserInfo.objects.filter(username='root').update(password='222')
(5)一對多操作
通過外來鍵約束
b=models.ForeignKey(to="UserInfo",to_field='id')
(6)多對多操作
c.常用欄位型別
字串 models.CharField 字串欄位,不必須設定max_length引數 models.EmailField models.IPAddressField IPV4 models.GenericIPAddressField IPV4和IPv6 models.TextField 數字 models.FloadField models.IntegerField models.BigIntegerField models.Decimal 十進位制小數型別,必須指定整數位max_digits和小數位max_places models.SmallInteger 時間 models.DateField 日期型別,對於auto_time=now,每次更新都會更新這個時間;auto_now_add則只是第一次建立新增,之後更新不在改變 models.DateTimeField models.TimeField 二進位制 models.BinaryField 布林 models.BoolenField 布林型別=tinyint(1),不能為空,Blank=True models.NullBoolenField 允許為空的布林型別 自增 models.AutoField 自增列=int(11) 預設自動建立id自增主鍵,如果顯示設定自增列必須設定其為主鍵 其他型別 models.ImageField 圖片 models.FilePathField 檔案 models.ForeignKey("參考主鍵表",to_field='主鍵表列')
d.常用欄位引數
null: DB是否可以為空 default: 預設值 primary_key: 主鍵,primary_key=True db_column: 列名 db_index: 索引,db_index=True unique: 唯一索引,unique=True unique_for_date: unique_for_month: unique_for_year: choices: django admin中顯示下拉框,避免連表查詢 auto_now: 更新時自動生成 auto_now_add: 建立時自動生成 blank: django admin表示是否為空 verbose_name: django admin顯示欄位中文 editable: django admin控制是否被編輯 error_message: django admin自定義報錯資訊 help_text: django admin幫助資訊 validators: django admin自定義錯誤資訊
2、資料庫配置
settings.py裡有資料來源配置,預設是sqlite
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } 其他支援的資料來源配置: 'django.db.backends.postgresql_psycopg2' 'django.db.backends.mysql' 'django.db.backends.sqlite3' 'django.db.backends.oracle' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '5432', } }
注意:
python2裡用的MySQLdb模組,而python3裡預設沒有MySQLdb模組,使用pymysql連線Mysql資料庫
在project同名的__init__.py裡需要寫入以下程式碼:
import pymysql
pymysql.install_as_MySQLdb()
3、應用模組匯入
在settings.py中匯入相應的應用模組名稱
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'cmdb', )
4、生成資料庫表結構
a.生成臨時檔案,在migrations
python manage.py makemigrations Migrations for 'cmdb': 0001_initial.py: - Create model UserInfo
b.正式執行生成表結構
python manage.py migrate
Operations to perform:
Synchronize unmigrated apps: messages, staticfiles
Apply all migrations: cmdb, sessions, auth, admin, contenttypes
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying cmdb.0001_initial... OK
建立後的表名為:cmdb_userinfo
5、登陸示例
6、Ajax
$.ajax({ url:'/host' type:"POST" data:{'k1':123,'k2':"root"}, success:function(data){ }) }