小白的Django學習筆記。本人隨便寫寫,本人用的mac+Python3.6。
一、環境搭建
1. 安裝Django
由於我的執行環境是mac+python3.6,所以我用的是Django1.11版本:
pip install Django==1.11
複製程式碼
其他版本如下:
2. 建立專案
本人建立的專案名稱叫:blogDemo,所以程式碼如下:
django-admin startproject blogDemo
複製程式碼
3. 建立應用
然後進入和manage.py同級的專案資料夾,用命令建立應用myblog:
python manage.py startapp myblog
複製程式碼
啟動伺服器:
python manage.py runserver
複製程式碼
啟動伺服器後,獲取到的地址,就是本專案根地址: Django version 1.11, using settings 'blogDemo.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. 改變埠:
python manage.py runserver 9999(埠號)
複製程式碼
二、hello world
1. 專案結構介紹
專案檔案下的settings.py是專案的配置檔案,包括是否debug模式,APP註冊,語言設定等等。我把專案的根地址改成localhost,便於訪問。在setting.py中ALLOWED_HOSTS = ['localhost']
。urls.py是專案的url檔案,所有的url都要在urlpatterns註冊。其他的檔案暫時不管。
應用檔案下的的admin.py是後臺管理系統的管理檔案。models.py相當於MVC中的M檔案,一個類對應一張表,Django直接用類來運算元據庫。views.py是主要響應檔案,每個響應對應一個函式,函式必須返回一個響應,每個響應函式對應一個url。其他的檔案暫時不管,一時記不住不管,往下寫程式碼就行。
2. 開始寫程式碼
所以的應用必須在settings.py中註冊:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myblog'
]
複製程式碼
然後在views.py中寫頁面資料程式碼:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse('hello world')
複製程式碼
所有的頁面都要在urls.py中註冊:
from django.conf.urls import url
from django.contrib import admin
from myblog import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
]
複製程式碼
然後開啟網址localhost:8000/index效果就出來啦,當然前提得是你啟動了伺服器python manage.py runserver。
3. url註冊
由於專案的複雜性,所有應用的url都在urls.py中註冊,容易重名,不易讀,也不便管理,所以在應用myblog資料夾下新建一個urls.py用於管理本應用的url。專案的urls.py檔案程式碼如下:
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^myblog/', include('myblog.urls')),
]
複製程式碼
然後在應用資料夾下的urls.py中程式碼如下:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^index/$', views.index),
]
複製程式碼
然後開啟網址**localhost:8000/myblog/index/**測試。
三、templates
1. 建立template檔案:index.html
由於Django是由settings.py中的INSTALLED_APPS應用新增順序來查詢templates,所以不同應用下的html檔案重名後會發生衝突。解決方案是,在應用目錄的templates下,建立與應用同名的資料夾,把html檔案放在此資料夾裡。
2.顯示index.html
在views.py中返回此介面:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request,'myblog/index.html',{'param1':'hello 你好'})
複製程式碼
在index.html中顯示引數param1的資料:<h1>{{param1}}}</h1>
,引數的資料顯示用{{}}括起來。更多資料點這裡。
四、models
1. 在APP目錄中的models.py中建立類,繼承models.Model。
from django.db import models
class Artical(models.Model):
title = models.CharField(max_length=32)
content = models.TextField(max_length=100)
複製程式碼
更多變數的屬性在這裡。
2. 生成資料表
先輸入命令:python manage.py makemigrations
然後再輸入命令python manage.py migrate
。
完成資料遷移後應用目錄中會出現migrations的資料夾,裡面有0001_initial.py檔案,這個檔案就是Artical模型的初始化檔案,你可以在終端用命令python manage.py sqlmigrate myblog 0001
檢視sql語句。
3 . 插入並顯示資料
python manage.py migrate 過後,檔案中多了一個db.sqlite3的資料庫。除了用開啟資料庫認為新增資料,還可以程式碼新增,詳細資料點這裡。在models.py中程式碼如下:
class ArticalManager(models.Manager):
def create_artical(self,title,content):
artical =self.create(title = title,content = content)
return artical
class Artical(models.Model):
title = models.CharField(max_length=32)
content = models.TextField(max_length=100)
objects = ArticalManager()
複製程式碼
然後views.py中實現資料響應:
from django.shortcuts import render
from django.http import HttpResponse
from . import models
def index(request):
articals = models.Artical.objects.all() #獲取全部資料
#artical = models.Artical.objects.get(pk=1) 獲取第一行資料
if len(articals) == 0:
artical = models.Artical.objects.create_artical("這是標題","這是內容")
artical.save()
articals = models.Artical.objects.all()
return render(request,'myblog/index.html',{'param1':'我的首頁','articals':articals})
複製程式碼
在index.html中顯示資料:
<body>
<h1>{{param1}}</h1>
{% for artical in articals %}
<a href="">{{artical.title}}</a>
{% endfor %}
</body>
複製程式碼
五、admin操作
1. 建立使用者
輸入命令python manage.py createsuperuser
建立超級使用者,然後登陸後臺管理系統localhost:8000/admin/。就看到以下介面:
admin.site.register(models.Artical)
然後首頁就有了Artical表,點進Artical詳情後顯示的是Artical object。如果想要顯示標題和其他欄位,程式碼如下:
from django.contrib import admin
from . import models
class ArticalAdmin(admin.ModelAdmin):
list_display = ('title','content')
admin.site.register(models.Artical,ArticalAdmin)
複製程式碼
然後效果如下:
2. 改變語言
後臺管理系統一般預設為英語,想中文顯示,在settings.py中把LANGUAGE_CODE 改成 'zh_Hans' 就好啦。
3. 過濾器
比如你在Artical的後臺管理介面,只想看某一天的記錄,那麼我們在models.py中新增一個欄位pub_time = models.DateField(null=True)
,然後在admin.py中的ArticalAdmin類中新增list_filter = ('pub_time',)
,最後要進行資料遷移python manage.py makemigrations
和python manage.py migrate
。效果如下: