django 第一天
django第一天
1.django簡介
Django釋出於2005年,是當前Python世界裡最負盛名且成熟的網路框架。最初用來製作線上新聞的Web站點。Django是一個用Python編寫的開放原始碼的Web應用框架(原始碼是開源的,遵守BSD版權)。採用了MVC的框架模式,也有很多人把它稱為MVT(MTV)模式。
django版本
django各個版本對python的要求:
Django version | Python versions |
---|---|
1.11 | 2.7, 3.4, 3.5, 3.6 |
2.0 | 3.4, 3.5, 3.6, 3.7 |
2.1, 2.2 | 3.5, 3.6, 3.7 |
2.django的安裝
2.1.環境要求
作業系統:ubuntu16.04
python版本:>=3.4
Django版本:1.11
2.2.安裝
首先使用pyenv建立一個虛擬開發環境,然後使用pip安裝
pyenv virtualenv 3.6.4 blogproject pyenv activate blogproject pip install django==1.11.16 #安裝指定版本的django
安裝完畢後,測試一下是否安裝成功
#在虛擬開發環境中
>>>python #開啟python
>>>import django
>>>django.get_version()
3.第一個django專案
先切換到指定目錄,開啟虛擬環境,然後用以下指令建立一個專案
3.1 建立專案
cd project
pyenv acivate django
django-admin startproject hello
3.2 專案的目錄結構:
├── hello #專案目錄 │ ├── __init__.py #包標誌 │ ├── settings.py #專案配置檔案 │ ├── urls.py #路由對映表 │ └── wsgi.py #wsgi介面 └── manage.py #專案管理命令
manage.py:是Django用於管理本專案的命令列工具,之後進行站點執行,資料庫自動生成等都是通過本檔案完成。
專案配置檔案
# 專案根目錄 manage.py所在目錄
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 除錯模式
DEBUG = True
#允許訪問的主機
ALLOWED_HOSTS = ['*']
# 安裝的應用,自己定義應用也應該新增到這裡
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
#模板配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], #模板路徑
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
# 資料庫配置
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# 國際化
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'zh-hans' #語言編碼
TIME_ZONE = 'Asia/Shanghai' #時區
3.3 測試伺服器啟動
在命令列下鍵入:
#命令:python manage.py runserver [ip:port]
python manage.py runserver
python manage.py runserver 0.0.0.0 9000
測試伺服器預設埠是8000,僅限於本地連線。開啟瀏覽器輸入:
http://localhost:8000 #或者
http://127.0.0.1:800
可以看到自己的網站。
如果要讓遠端客戶端連線需要修改配置檔案,其中0.0.0.0:9000是可選的,0.0.0.0說明任何ip都可以訪問。
#修改setting.py中的這一行
ALLOWED_HOSTS = ['*']
3.4 建立應用
一個django專案中可以包含多個應用,可以使用以下命令建立應用:
#命令: python manager.py startapp 應用名稱
例項: python manager.py startapp app
建立應用後,專案的結構如下:
├── App
│ ├── admin.py 站點管理
│ ├── apps.py 應用程式自身資訊
│ ├── __init__.py
│ ├── migrations 資料遷移
│ │ └── __init__.py
│ ├── models.py 模型
│ ├── tests.py
│ └── views.py 檢視響應函式
├── db.sqlite3 sqlite資料庫
├── hellodjango 專案
│ ├── doc.py
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── settings.cpython-36.pyc
│ │ ├── urls.cpython-36.pyc
│ │ └── wsgi.cpython-36.pyc
│ ├── settings.py 系統配置
│ ├── urls.py 路由對映表
│ └── wsgi.py wsgi協議
└── manage.py 專案管理命令
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'App', 安裝自己的應用
]
到此為止,我們已經搭建好專案的基本框架,但專案還沒有實質性內容,下面將從檢視函式開始給專案新增功能。
4.簡單檢視函式
在django中view代表檢視函式,接收使用者的請求,進行處理然後返回html原始碼給客戶端。在框架中,我們可以在應用(app)的views.py中寫自己的檢視函式,進行相應的處理。
檢視函式只是一個普通的python函式,它的第一個引數必須是一個請求(request)物件,這是框架傳入的,我們可以通過請求物件獲取提交引數等內容。它的返回值必須是一個web響應,可以文字、html原始碼、重定向、404等內容。下面我們寫一個簡單檢視函式,返回“Hello Django"
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello Django")
其中HttpResponse函式需要引入模組django.http,我們可以直接寫HttpResponse,然後通過快捷鍵alt+enter,在下拉框中選擇要匯入的模組。
- alt+enter 程式碼飄紅、飄黃、檢視定義、引入包都可以使用。
5.基本路由
新增完檢視函式後,還無法在瀏覽器中檢視,必須新增路由。所謂路由就是將使用者請求轉換為訪問對應的檢視函式。專案路由在hello下urls.py中
"""
from django.conf.urls import url
from django.contrib import admin
from App import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.index)
]
路由由兩部分組成,第一部是一個正則表示式,匹配使用者的url,第二部分是檢視函式
url(r'^$', views.index)
r'^$' 正則規則匹配請求路徑(埠後到?前部分)
views.index 檢視函式
正則表示式r’^$'匹配使用者在位址列中鍵入的url,當用戶在位址列中鍵入http://localhost:9000時會顯示Hello World.
6.簡單模板
在上面我們已經能夠展示簡單的web頁面,但要顯示一個html頁面,需要使用模板,在app下建立templates目錄,在templates目錄下建立一個index.html檔案
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>搜狐</title>
</head>
<body>
當你的才華還撐不起你的野心的時候,你就應該靜下心來學習;<br>
當你的能力還駕馭不了你的目標時,就應該沉下心來,歷練;
</body>
</html>
然後修改views中檢視函式index
from django.shortcuts import render
def index(request):
return render(request,'index.html')
重新訪問網站。
也可以在html中使用變數和流程控制結構,生成複雜的html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 模板中新增變數 -->
<title>{{ title }}</title>
</head>
<body>
當你的才華還撐不起你的野心的時候,你就應該靜下心來學習;<br>
當你的能力還駕馭不了你的目標時,就應該沉下心來,歷練;
</body>
</html>
然後修改檢視函式:
from django.shortcuts import render
def index(request):
return render(request,'index.html',content={'title':'草榴'})
重新訪問首頁
7.簡單模型
django自帶了一個sqlite資料庫,可以用於測試,生產環境一般不用。在配置檔案中已經設定好預設的sqlite資料庫。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', #資料庫引擎
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), #資料庫檔案路徑
}
}
在pycharm左邊欄中選----database,然後點選"+",彈出sqlite的配置視窗
將File改為專案中sqlite檔案:db.sqlite3,然後點選測試,看看能否連線成功。第一次配置時,需要下載sqlite的驅動。完成後點選ok。
然後到app中models.py中建立一個User類:
class User(models.Model):
uname = models.CharField(max_length=20)
password = models.CharField(max_length=32)
到命令列下,輸入:
python manage.py makemigrations #生成資料庫遷移檔案
python manage.py migrate #生成資料庫表
然後到pycharm左邊欄database中檢視:
雙擊app_user新增資料:
到此為止,我們已經給app_user表添加了資料。然後給app新增一個模板:list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用者列表</title>
</head>
<body>
<table width="80%" align="center" border="1" cellspacing="0">
<caption>使用者列表</caption>
{% for user in users %}
<tr>
<td>{{ user.uname }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
繼續給app新增一個檢視操作函式:
from app.models import User
def userlist(req):
#獲取app_user表中所有資料
persons = User.objects.all()
return render(req,"list.html", context={'users':persons})
在專案的路由表中新增路由:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$',views.index),
url(r'^list/$',views.userlist),
]
到瀏覽器中訪問:http://localhost:9000/list/