1. 程式人生 > >Django筆記二

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名
對應的功能分別為新增、修改、刪除。