部署Django
一、簡介
- Django是一個開放源代碼的Web應用框架,由Python寫成
- 最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容爲主的網站
- 2005年7月在BSD許可證下發布
二、框架介紹
- Django 框架的核心組件有:
- 用於創建模型的對象關係映射
- 爲最終用戶設計的完美管理界面
- 一流的 URL 設計
- 設計者友好的模板語言
- 緩存系統
三、MVC模式
- 把數據存取邏輯、業務邏輯和表現邏輯組合在一起的概念被稱爲軟件架構的Model - View - Controller(MVC模式)
- 在這個模式中,Model代表數據存取層,View代表的是系統中選擇顯示什麼和怎麼顯示的部分,Controller指的是系統中根據用戶輸入並視需要訪問模型,以決定使用哪個視圖的那部分
四、MTV模式
- Django的MTV模式本質上和MVC是一樣的,也是爲了各組件間保持鬆耦合關係,只是定義上有些許不同
M 代表模型(Model):負責業務對象和數據庫的關係映射(ORM)
T 代表模板 (Template):負責如何把頁面展示給用戶(html)
V 代表視圖(View):負責業務邏輯,並在適當時候調用Model和Template -
除了以上三層之外,還需要一個URL分發器,它的作用是將一個個URL的頁面請求分發給不同的View處理,View再調用相應的Model和Template
- MTV響應模式
- web服務器(中間件)收到一個http請求
- Django在URLconf裏查找對應的視圖(View)函數來處理http請求
- 視圖函數調用相應的數據模型來存取數據、調用相應的模板向用戶展示頁面
- 視圖函數處理結束後返回一個http的響應給Web服務器
- Web服務器將響應發送給客戶端
五、安裝Django
1、配置虛擬環境
1-1. 創建虛擬環境
[root@room9pc01 day20]# mkdir -pv /opt/py3env
[root@room9pc01 day20]# ls /opt/py3env
[root@room9pc01 day20]# python3 -m venv /opt/py3env/djenv
1-2. 激活虛擬環境
[root@room9pc01 day20]# source /opt/py3env/djenv/bin/activate
激活之後,運行python默認是py3
1-3. 默認激活之後,安裝django,就是安裝在了虛擬環境下
(djenv) [root@room9pc01 day20]# pip install django==1.11.6
(djenv) [root@room9pc01 day20]# pip install pymysql
注意:如果以上方式無法安裝可以採用如下方式
1) 更換鏡像站點
(djenv) [root@room9pc01 day20]# cat ~/.pip/pip.conf
[global]
index-url=http://pypi.douban.com/simple
[install]
trusted-host=pypi.douban.com
2)查看當前環境安裝的軟件包
(djenv) [root@room9pc01 day20]# pip freeze
asn1crypto==0.24.0
cffi==1.11.5
cryptography==2.3.1
Django==1.11.6
idna==2.7
pycparser==2.18
PyMySQL==0.9.2
pytz==2018.5
six==1.11.0
(djenv) [root@room9pc01 day20]# pip freeze > pkgs.txt
(djenv) [root@room9pc01 day20]# pip install --download /存儲目錄 pkgs.txt
(djenv) [root@room9pc01 day20]#pip install 文件名
2、Django
2-1. 創建項目
(djenv) [root@room9pc01 day20]# django-admin startproject mysite
(djenv) [root@room9pc01 day20]# cd mysite/
2-2. pycharm設置,使用虛擬環境
file -> settings -> project xxx -> project interpreter -> 添加現有環境找到/opt/py3env/djenv/bin/python
2-3. 爲django項目創建數據庫
(djenv) [root@room9pc01 mysite]# mysql -uroot -ptedu.cn
MariaDB [(none)]> create database dj_tedu default charset utf8;
2-4. 修改django的設置 settings.py
ALLOWED_HOSTS = '*' # 允許所有客戶端訪問
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dj_tedu',
'USER': 'root',
'PASSWORD': 'tedu.cn',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
2-5. 加載連接mysql的模塊,在__init__.py中寫入以下內容
import pymysql
pymysql.install_as_MySQLdb()
2-6. 啓動服務
(djenv) [root@room8pc16 mysite]# python manage.py runserver 0:8000
2-7. 生成數據庫
(djenv) [root@room9pc01 mysite]# python manage.py migrate
2-8. 創建後臺管理員
(djenv) [root@room9pc01 mysite]# python manage.py createsuperuser
2-9. 啓動服務後,訪問http://127.0.0.1:8000/admin
3、Django基礎測試
3-1. 新建視圖
# vim mysite/views.py
from django.shortcuts import HttpResponse
def index(request):
return HttpResponse('<h1>Hello World!</h1>')
3-2. 修改urls.py,訪問主頁時,使用views模塊的index函數響應
from django.conf.urls import url
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$',views.index, name='index'), # name='index'是首頁URL的
]
4、管理“投票”應用
4-1. 創建應用
(djenv) [root@room9pc01 mysite]# python manage.py startapp polls
4-2. 在項目中註冊應用,修改settings.py
INSTALLED_APPS = [
... ...
'polls',
]
4-3. 規劃url,polls應用下有很多個頁面,但是每個頁面訪問時,都以http://127.0.0.1/polls開頭,如http://127.0.0.1/polls/1 polls應用有自己的URLConf,當訪問到http://127.0.0.1/polls開頭的網址都交給polls應用的urls.py
# vim mysite/urls.py
from django.conf.urls import url, include
urlpatterns = [
... ...
url(r'^polls/', include('polls.urls')),
]
# vim polls/urls.py
from django.conf.urls import url
urlpatterns = [
url(r'^$'),
4-4. 創建應用的url映射文件
# vim polls/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.polls_index, name='polls_index'),
]
4-5. 創建視圖
# vim polls/views.py
from django.shortcuts import render, HttpResponse
def polls_index(request):
return HttpResponse('<h1>Polls index</h1>')
4-6. 創建模版
(1) 創建模板目錄
[root@room9pc01 mysite]# mkdir -p polls/templates/polls #templates是django固定的,polls是存放網頁文件
(2)創建模板文件
# vim polls/templates/polls_index.html
(3)更改視圖views.py
def polls_index(request):
return render(request,'polls/polls_index.html')
4-7. 添加boostrap樣式
將前面解壓的bootstrap拷貝過來
[root@room9pc01 mysite]# cp -r ../../day18/static/ polls/
在模版文件polls_index.html中添加引用
文件頂部增加一行:
{% load staticfiles %}
head標籤中加入
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
5、建立模型Model
5-1. 創建ORM映射類
# vim polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
publish_date = models.DateTimeField()
def __str__(self):
return self.question_text
class Choice(models.Model):
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
question = models.ForeignKey(Question, models.CASCADE)
def __str__(self):
return self.choice_text
5-2. 生成數據庫中的表
(djenv) [root@room8pc16 mysite]# python manage.py makemigrations
(djenv) [root@room8pc16 mysite]# python manage.py migrate
5-3. 在數據庫中show tables查看錶名
5-4. 查看錶中字段
(1)django會在表中自動加入一列id,作爲主鍵
(2)表中的每個字段與類變量相同
(3)外鍵是類變量名加上_id
5-5. 把模型註冊到後臺管理界面,修改polls/admin.py如下:
from django.contrib import admin
from .models import Question, Choice
admin.site.register(Question)
admin.site.register(Choice)
5-6. 訪問http://127.0.0.1:8000/admin,在後臺可以添加數據