部署Django


一、简介

  • Django是一个开放源代码的Web应用框架,由Python写成
  • 最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站
  • 2005年7月在BSD许可证下发布

二、框架介绍

  • Django 框架的核心组件有: 1. 用于创建模型的对象关系映射 2. 为最终用户设计的完美管理界面 3. 一流的 URL 设计 4. 设计者友好的模板语言 5. 缓存系统

三、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响应模式 1. web服务器(中间件)收到一个http请求 2. Django在URLconf里查找对应的视图(View)函数来处理http请求 3. 视图函数调用相应的数据模型来存取数据、调用相应的模板向用户展示页面 4. 视图函数处理结束后返回一个http的响应给Web服务器 5. 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('Hello World!')
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('Polls index')
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,在后台可以添加数据