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

Django筆記一

##這裡是Django日常工作中隨手記錄下來的一些筆記和摘要。便於日後查詢。

首先,Django需要很多第三方包,我這裡直接用virtualenv做環境部署,這樣可以為每個應用建立一套獨立的隔離的python執行環境。

用virtualenv建立一個獨立的虛擬環境:

pip install virtualenv
mkdir virtualenv
cd virtualenv/

建立並進入虛擬環境:

virtualenv --no-site-packages ffvenv #建立環境
source ffvenv/bin/activate   #進入虛擬環境

退出當前虛擬環境:

deactivate

virtualenvwrapper 是可選方案,它可以提供多個虛擬環境的統一管理方案,安裝如下:

pip install virtualenvwrapper

在虛擬環境中安裝python3和pip
python下載連結https://www.python.org/ftp/python/

pip -V
pip install --upgrade pip
pip install Django==1.11.8

另外,附上windows下建立虛擬環境並配置django的方案:

pip install virtualenvwarpper-win
mkvirtualenv testvir2
deactivate  #退出

workon
workon testvir2 #進入虛擬環境
pip list
pip install requests
pip uninstall requests
pip install Django==1.11.8

Django的settings檔案配置

資料庫配置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "testdjango",
        'USER': "root",
        'PASSWORD': "xxx",
        'HOST': "192.168.1.xxx"
    }
}   #資料庫配置

LANGUAGE_CODE = 'zh-hans' #中文配置
TIME_ZONE = 'Asia/Shanghai' #時區配置
USE_TZ = False  #資料庫時間配置
TEMPLATE下的DIRS的配置
新建STATICIFLES_DIRS的配置

PyCharm執行:
makemigrations
migrate #生成資料表

編寫view.py
配置urls.py
Html和css檔案分離
css檔案分離與地址修改

安裝mysql-python
下載Mysql包:
下載地址: http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python
找到 32位或64位安裝包:
MySQL_python-1.2.5-cp27-none-win32.whl
MySQL_python-1.2.5-cp27-none-win_amd64.whl
然後執行:
pip install MySQL_python-1.2.5-cp27-none-win32.whl


驗證Django:

python3
import django
django.get_version()

linux命令列中執行命令,建立一個專案:

django-admin.py startproject Djangotest

pip install pysqlite
yum install sqlite*
python manage.py startapp learn #新建一個應用
systemctl stop firewalld.service

在我們建立的專案裡修改setting.py檔案
ALLOWED_HOSTS = [’’] #在這裡請求的host添加了

python manage.py runserver 0.0.0.0:8080

通常情況下,在Django中,一個Model對應資料庫中的一個數據表,
這個Model以類的形式表現出來,它包含了一些基本欄位及資料的一些行為。
Django以建立類的形式建立資料表。
所有對資料庫的操作,都是對類及類的物件進行操作。
不需要寫SQL語句。
這就是ORM物件關係對映。
隱藏資料訪問細節,把SQL語句都封裝起來。

建立一個類,繼承models.Model,這個類就是一張資料表,
在類中建立欄位,欄位就是類裡面的屬性(變數)。
如:attr = models.CharField(max_length=32,default=‘title’)
命令列中進入manage.py的同級目錄,
執行python manage.py makemigrations app (這裡的app是指的你的app的名字)
再執行python manage.py migrate
如果是PyCharm,那就執行:
startapp app (這裡的app是指的你的app的名字)
makemigrations app
migrate app
然後就可以檢視資料庫是否做了表結構的改變
檢視所執行的sql語句:
sqlmigrate app名 檔名
sqlmigrate message 0001

建超級使用者命令createsuperuser

原始碼安裝xadmin:
1、github下載xadmin原始碼
2、複製到Project目錄下
3、修改settings檔案:

    INSTALLED_APPS 中新增
    'xadmin',
    'crispy_forms',

4、安裝依賴包:

pip install django-crispy-forms django-formtools 
pip install six future httplib2
pip install django-import-export

5、修改urls.py

import xadmin

urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls),
]

6、PyCharm–Debug測試一波

如果要合併目錄,比如所有app放到apps目錄和extra_apps目錄中,,settings配置如下:

......
import sys

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
......

一個表中的FOREIGNKEY指向另一個表中的 PRIMARY KEY
django中的models只是建立對錶的描述,一個類對應資料庫中的一個表------建立目錄並記錄makemigrations------在資料庫中建立表migrate

    user = models.ForeignKey(UserProfile, verbose_name=u"使用者")

verbose_name_plural是verbose_name的複數形式
所以verbose_name_plural = verbose_name ,實際上是讓複數形式等於原始引數,否則會在名稱後面自動加S

在xadmin後端管理介面裡,對該Model進行新增操作的時候,報錯:list index out of range
原因有兩方面:
1、在建立Model的時候,存在型別是DateTimeField的欄位
2、input_html報錯,Django後續新版本追加了spaceless標籤的提交記錄
解決方案:找到input_html定義,換一種拆分方式,用“/><”替換掉“\n”,
修改widgets.py原始程式碼:

input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('\n') if ht != '']

下面為改好的:

input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('/><') if ht != '']
input_html[0] = input_html[0] + "/>"
input_html[1] = "<" + input_html[1]

參考連結:
http://blog.csdn.net/yuhan963/article/details/79167743

django error: [Errno 10053]:
現象:反覆重新整理頁面,debug就會報這個錯,
google了一下,應該是屬於django版本的問題,不影響什麼功能。

參考連結:

http://www.runoob.com/django/django-tutorial.html