Django筆記二
這裡是Django日常工作中隨手記錄下來的一些筆記和摘要。便於日後查詢。
版本更新。Django做了升級,改用了python3.6.4+Django2.0.7。
model中get和filter的區別
model中get和filter的區別:
get返回一個,且返回的是tuple,元組。
filter返回一個或多個,返回的是查詢集,QuerySet。
這兩者返回的型別不一樣。
get如果有多個匹配會報錯,不過可以直接通過get取欄位,比如查userinfo的表:
id = models.userinfo.objects.get(user='建國').password
filter如果這樣操作就會報錯,因為filter返回的是查詢集。
不過呢,我們可以直接獲取結果中的第一個資料,即在最後新增.first(),然後就可以取出欄位了:
models.userinfo.objects.filter(user='建國1').first().password
通常建議用filter
我們還可以通過value來查詢,用法跟sql語法類似:
model.userinfo.objects.all().value('user', 'password')
另外django裡修改某個欄位值的語句:
models.userinfo.objects.filter(id = '2').update(password = 'dafdasfasdf')
Django2.0以上安裝xadmin
django2.0以上版本安裝xadmin需要藉助三方程式碼:
https://github.com/sshwsfc/xadmin/tree/django2
通常可以使用:
pip install git+https://github.com/sshwsfc/[email protected]
不過中國網路環境比較特殊,可能導致這個方法無法使用,或者速度非常慢。
所以我只好Download ZIP,下載這個zip包。
然後
pip install --cache-dir . /root/xadmin-django2.zip #後面這個請自行替換檔案路徑
Django-guardian
Django自身可以通過user、group、permission完成了許可權控制。
而Django-guardian是為Django提供額外的物件許可權的身份驗證後端。
注意,是可以對物件進行許可權驗證。
安裝Django-guardian:
pip3 install django-guardian
安裝完成以後,需要修改settings裡檔案的配置,這其中有兩個地方需要更改INSTALLED_APPS 和AUTHENTICATION_BACKENDS :
INSTALLED_APPS = [
....
'guardian',
....
]
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'guardian.backends.ObjectPermissionBackend',
)
我們新建一個models名叫serverinfo,在Django中,models名對應的就是資料庫中的表。
注意,這裡有一個欄位reported_by 外來鍵到User,User是資料庫中另外一個表:
from django.db import models
from django.contrib.auth.models import User
class ServerInfo(models.Model):
id = models.AutoField(primary_key=True, null=False, verbose_name='ID')
server_name = models.CharField(max_length=50, null=False, verbose_name='伺服器名稱')
type = models.CharField(max_length=50, null=False, verbose_name='型別')
server_ip = models.CharField(max_length=16, null=False, verbose_name='IP')
reported_by = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
permissions = (
('view_task', 'View task')
)
注意後面的reported_by中的on_delete,這兒有雷。
在django2.0後續的版本中必須要加這個on_delete後面這一串,否則會報錯。
參考https://www.cnblogs.com/phyger/p/8035253.html
另外說明一下:Meta中的permissions是我們自定義的許可權,當我們呼叫migrate命令的時候,view_task將會被新增到預設的許可權集合中。
預設情況下Django為每個model準備了3個許可權:
add_model名
change_model名
delete_model名
對應的功能分別為新增、修改、刪除。