03 初识Django

1. MVC与MTV模型

MVC

  Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM);视图负责与用户的交互(页面); 控制器接受用户的输入, 调用模型和视图, 完成用户的请求. 

mvc主要用于web框架,常用的开发语言,有java,php,node.js等等。

web框架应用最广泛就是PHP了,它只能做web开发,而且开发效率很快。

MTV

  Django的MTV模式本质上和MVC是一样的,为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

  M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
  T 代表模板 (Template):负责如何把页面展示给用户(html)。
  V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
  除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:*****

 

  一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

这里面最难的部分是model。django 有一个ORM,它是专门来操作数据库的。这套语法,需要大量练习才能掌握。

 

MVC和MTV模型的区别:

MVC:

    M : model   (与数据库打交道)

    V :   views    (存放html文件)

 C : Controller(逻辑控制部分)    

MTV

    M : model     (与数据库打交道)

    T : templates    (存放html文件)    

    V : views      (逻辑处理)

路由控制层(分发哪一个路径由哪一个视图函数处理),它没有单独的分层。它作为URL分发器,将url请求分发给不同的view处理

 

2. Django的下载与基本命令

下载Django:

pip3 install django

pip install django==1.11.18 -i https://pypi.douban.com/simple/

2.1 创建一个django project

windows用户,以管理员身份打开一个cmd窗口。进入一个空目录,运行以下命令:

django-admin startproject mysite

当前目录下会生成同名mysite的项目,mysite是项目名。目录结构如下:

mysite/
├── manage.py            # 管理文件
└── mysite              # 项目目录
    ├── __init__.py
    ├── settings.py        # 配置
    ├── urls.py          # 路由 --> URL和视图函数的映射关系(对应关系)
    └── wsgi.py          # runserver命令就使用wsgiref模块做简单的web server,封装了socket

manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。
settings.py ----  包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py -----    负责把URL模式映射到应用程序。    

 

manage.py : 它不仅是启动文件,它还是与Django交互的文件。比如:

python manage.py  runserver   : 运行项目

python manage.py  startapp    : 创建应用

如果运行项目时,不指定端口,默认监听本机的8000端口。

 

setting.py的简单讲解

#settings的绝对路径,再往上找,再上找,就是项目目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True# 上线的时候要改成false
ALLOWED_HOSTS = ['*']    #允许的ip,* 代表所有的都允许
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],# template文件夹位置,路径拼接
        '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',
            ],
        },
    },
]

deROOT_URLCONF = 'mysite2.urls'ROOT_URLCONF = 'mysite2.urls'
ROOT_URLCONF = 'mysite2.urls'  # url的位置,在mysite2的路径下
#如果在pycharm里面移动更改它的位置,会提示search for reference,点击√,会自动将ROOT_URLCONF的路径修改
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'      # 别名.  HTML中使用的静态文件夹前缀
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')    # 静态文件存放位置
]

 

2.2 在mysite目录下创建应用

进入mysite目录, 创建应用blog,要进入项目路径,在里面执行manage.py

python manage.py startapp blog

目录结构如下:

mysite/
├── blog
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

views.py---存放与该app相关的视图函数

models---存放与该app相关的表结构,与数据库打交道

templates目录,它是用来存放html文件的。

 从上面的目录结构可以看出,mysite目录下有一个blog。那么顶层的mysite,叫做项目。底层的blog叫做应用。比如微信是一个项目。聊天,朋友圈,支付...都是应用。项目是必须包含应用的,项目可以包含多个应用。

mysite下的mysite,是全局文件,它有2个全局配置文件,一个是settings.py(项目配置文件),一个是urls.py(路由控制文件)。

wsgi.py是封装socket,用来接收和响应请求的。这个文件,从来都不需要动。

2.3 启动django项目

python manage.py runserver ip port    # 如果不写,默认是本机ip,端口号8000

 

3. 基于Django实现的一个简单示例

url控制器

  修改mysite目录下的urls.py,增加index路径. 注意:index后面不要加括号。直接views.index即可. 必须导入blog应用的views模块,否则它找不到对应的视图函数

from django.contrib import admin
from django.urls import pathfrom blog 
import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),
    path('login/',views.login),
    path('auth/',views.auth),
]

视图

from django.shortcuts import render
import datetime
def index(request):
    now=datetime.datetime.now()
    ctime=now.strftime("%Y-%m-%d %X")

return render(request,"index.html",{"ctime":ctime})

def login(request):
return render(request,"login.html")

def auth(request):
    print(request.path)          # 路径
    print(request.method)          # 请求方式
    print(request.GET)          # GET数据
    print(request.POST)          # POST数据
    return HttpResponse("OK")

request,它是一个对象。存储了请求信息,比如请求路径,请求方式,GET数据,POST数据...等等。

request参数必须要有,不管你用不用它。

模板

在templates目录下创建文件login.html.  post请求

在templates目录下创建文件login.html.  post请求
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/auth/" method="post">                            # action后面跟着是url,如果不填,就是当前    
    <lable>用户名</lable><input type="text" name="user"/>
    <lable>用户名</lable><input type="password" name="pwd"/>
    <input type="submit">
</form>
</body>
</html>

访问登录页面,输入数据,点击提交

 

页面输出403,被CSRF拦截了。

CSRF:跨站请求伪造,常缩写为CSRF或者XSRF,是一种对网站的恶意利用。如何避免CSRF。修改settings.py里面的MIDDLEWARE 配置项,关闭CSRF

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',                    #注释掉
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

再次访问url,输入表单信息,点击提交。输出ok,表示正常。

 

总结

1. MVC和MTV
    MTV 
        路由控制层(分发哪一个路径由哪一个视图函数处理)
        V : views      (逻辑处理)
        T : templates    (存放html文件)
        M : model     (与数据库打交道)
django,由4部分组成。路由控制+MTV

2.Django的命令:
1)下载安装 pip install django==1.11.16 -i 源    
2)创建项目 django-admin startproject 项目名称
       mysite
              manage.py    : 启动文件  交互文件
              mysite
                    settings.py   :配置文件
                    urls.py       :路由控制层(分发哪一个路径由哪一个视图函数处理)
                    wsgi.py       :socket

3)启动项目
    cd 项目根目录下 
    python manage.py runserver             # 默认使用127.0.0.1:8000
    命令后面还可以指定参数:
    python manage.py runserver 80             # 127.0.0.1:80
    python manage.py runserver 0.0.0.0:80             # 0.0.0.0:80指定IP和端口,冒号分割

4)创建APP
            python manage.py startapp app名称 
     mysite
              manage.py    : 启动文件  交互文件
              mysite
                    settings.py   :配置文件
                    urls.py       :路由控制层(分发哪一个路径由哪一个视图函数处理)
                    wsgi.py       :socket
                    
              app01
                    views         : 存放视图函数文件
                    models        :数据库打交道
              app02
                    views         : 存放视图函数文件
                    models        :数据库打交道

            注册
5)数据库相关
            python manage.py makemigrations     # 记录model的变更情况 
            python manage.py migrate            # 将变更记录同步到数据库中
            
3. Django的配置
    1) django项目中的APP
         INSTALLED_APPS =[
            'app01',
            'app01.apps.App01Config',
         ]
    2)MIDDLEWARE 中间件
            django.middleware.csrf.CsrfViewMiddleware         注释掉后可以提交POST  
            
    3)TEMPLATES 模板
             'DIRS': [os.path.join(BASE_DIR, 'templates')],    

    4) DATABASES 数据库
            ENGINE: mysql
            NAME:  数据库名称
            HOST:   '127.0.0.1'
            PORT:   3306
            USER:  用户名
            PASSWORD 密码  '' 
            
    5). 静态文件
            STATIC_URL = '/static/'   # 别名
            STATICFILES_DIRS = [
                os.path.join(BASE_DIR, 'static'),
            ]

 

 

 

posted @ 2019-08-24 23:13  PythonGirl  阅读(108)  评论(0)    收藏  举报