Python Web框架(URL/VIEWS/ORM)

Rangle發表於2017-12-28

一、路由系統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){

})

}

 

 

相關文章