Django框架-基础篇

Posted sunxiuwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django框架-基础篇相关的知识,希望对你有一定的参考价值。

Django框架简介

一、软件架构模式MVC和MTV

1、MVC模型

MVC(model view controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(model)、视图(view)和控制器(controller),具有耦合性低,重用性高,生命周期成本低等优点。

技术分享图片

 

2、MTV模型

Django框架的设计模式借鉴了MVC框架的思想,也是分别三部分,来降低各个部分之间的耦合性。

Django的MTV分别代表:

  Model(模型):和数据库相关的,负责业务对象与数据库的对象(ORM)

  Template(模板):放所有的html文件,负责如何把页面展示给用户

           模板语法:目的是将自变量(数据库的内容)如何巧妙的嵌入到html页面中

  View(视图):负责业务逻辑,并在适当的时候调用Model和Template

  此外,Django还有一个URL分发器。它的作用是将一个个URL的页面请求分别发给不同的Views处理,Views再调用相应的Model和Template。

技术分享图片

3、MVC和MTCV的比较

技术分享图片

二、Django 下载安装

查看django版本:

cmd——>python -m django --version

pycharm——> import django ; print(django.version)

   命令行下载安装:

dos窗口中:
pip  install  django== 1.11.15 # 等号后为版本号,不加的话默认安装最新版本
pip  install  -i  https://pypi.doubanio.com/simple/  django==1.11.15(或者-i 指定源)

  pycharm的方式安装

打开pycharm -->file -->settings --> project interpreter --> 点击右侧绿色加号 -->在弹出对话框中输入django -->选中specify version,指定下载版本,默认最高版  -->最后点击左下角 install package

注:默认从https://pypi.python.org/simple下载模块,可更改国内的豆瓣源,点击install package 右侧的Manage Repositories 在里面添加其它的源,如https://pypi.doubanio.com/simple/

详细见下图:

技术分享图片

三、创建Django项目对象

  命令行创建:

切换目录到预存放项目文件的文件目录

django-admin  startproject   项目名称

eg:  django-admin  startproject    myblog

生成目录结构如下:

技术分享图片

  • manage.py------启动文件 (Django项目里面的工具,通过它可以调用Django shell的数目和数据库等)
  • settings.py------包含了项目的一些设置,包括数据库信息、调试标志以及其他一些工作的变量。
  • urls.py-----------路径与视图函数的映射关系
  • wsgi.py ...........帮我们实现socket,响应http请求

  注:命令行创建,不会创建templates模板【用于仅存放html文件,css,js等静态文件放到新建的static目录中】,

需要自己在项目根目录即与manage.py同级目录下创建templates文件夹,且要到settings.py中修改templates的DIRS中加入os.path.join(BASE_DIR,‘templates‘)

技术分享图片

  pycharm方式创建

 打开pycharm--->file ---->new project ---> 选中django 

 技术分享图片

 创建完成后项目目录结构如下:

技术分享图片

注:上面app01为创建的一个应用,Mysite为创建django目录时,自动在项目名下建立一个同名的目录。

四、启动Django项目

  1、命令行方式

切换到django项目根目录下(含有manage.py 的文件)
# 默认为本地,端口为8000
python manage.py runserver    # 127.0.0.1:8000  
# 可修改端口
python manage.py runserver 80   # 127.0.0.1:80
# 可修改ip和端口,4个零表示所有人都可以访问
python manage.py runserver 0.0.0.0:80   # 0.0.0.0:80


注:当项目上线后,需将ip和端口改为实际的

  2、pycharm方式

一个项目就是一个包,不要单独执行某个py文件,而是运行整个项目

技术分享图片

五、创建应用

注:因为一个项目要实现多个功能,因此一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码

如果不建立app也可以执行项目,即视图函数直接写在urls.py中,在settings.py中配置相关的模板,数据库信息,静态文件等信息。

  命令行创建app

python manage.py  startapp  应用名

eg: python manage.py startapp  app01

执行命令后,项目目录下多出一个app01的文件夹,目录结构如下:

app01/
    migrations         记录修改models即orm操作数据库的更改信息,每次更改都会在改目录下新建一个文件
        __init__.py     
    __init__.py        
    admin.py           
    apps.py            记录app信息,当在settings.py中注册app时是从此处找
    models.py          记录创建类【即相当如向数据库中创建表】在此处创建
    tests.py           
    views.py           本app自己的业务逻辑函数即视图函数写在这里

  使用PyCharm创建

可以使用PyCharm的manage.py工具来执行命名。在主菜单栏中选择Tools,在下拉菜单中选择Run manage.py task,会出现如下图所示的工具对话框:


技术分享图片

技术分享图片

在弹出的命令窗口中直接输入下面的命令便可创建app:

startapp app01

使用PyCharm的manage.py工具执行命令时,只用输入命令及参数即可,不再输入python manage.py了。

  注册app应用

创建完app后,想要使用,需先注册才能使用,在django根目录下的settings.py文件中的INSTALLED_APPS模块中注册app信息

格式如下:

应用名.apps.应用名Config
示例:【本质是导入应用目录下apps中为app建立的类】
INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘classModel.apps.ClassmodelConfig‘ ]

apps.py文件内容如下图:

技术分享图片

六、配置django项目与数据库mysql的连接

1、安装mysql数据库软件

2、安装 模块pymysql【python3.6后连接mysql只能用pymysql】

cmd--> pip3  install pymysql

3、手动连接数据库,创建一个库及创建一个操作此数据库的用户,赋予权限【django的ORM只能创建表,不能创建库】

# 创建库
create database db_name charset utf8;
# 创建用户及赋予权限
grant all privileges on db_name.* to ‘userName‘@‘ip‘ identified by ‘pwd‘;

4、在Django项目总配置文件setting.py同级目录下[不是app下的__init__]的__init__.py文件中配置项目使用pymysql来操作数据库

import pymysql

pymysql.install_as_MySQLdb()       # 告知django使用pymysql来连接书库

5、在Django项目总配置文件setting.py中的DATABASES模块中配置连接数据库相关信息,格式如下

DATABASES = {
                    ‘default‘: {
                            ‘ENGINE‘: ‘django.db.backends.mysql‘,  # 修改数据库引擎,默认为sqlite3文本数据库
                            ‘NAME‘: ‘db_name‘,
                            ‘USER‘: ‘**‘,
                            ‘PASSWORD‘:‘***‘,
                            ‘HOST‘:‘ip‘,
                            ‘PORT‘: 3306,     # 注意是数字,不是字符串
                        }
                    }

6、建表   在应用app的目录下的models.py中写类【必须继承models.Model类

from django.db import models   # 需先导入models模块

class Class(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=20, unique=True)

    def __str__(self):
        return self.name

# 在orm中
类      对应数据库中的       表
对象   对应数据库中的       记录(数据行)
属性   对应数据库中的       字段

7、建好类即表后,执行数据库迁移命令【让创建的表在数据库中生成】

# 记录models.py中类是不是有变化 将变化的内容记录下来 
python manage.py  makemigrations

# 将model的变更同步到数据库中
python  manage.py migrate


注:执行第一条命令后models.py中的变化就会在到migrations目录中创建一个新的文件并将变化写入其中
如果在原有表张增加字段的话,会提示要设置默认值,因为新的那列数据不能为空

七、项目启动后相关配置

  1、更改setting.py 

1.1、检查项目BASE_DIR是否如下:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

1.2、配置ALLOWED_HOSTS可以运行本项目的ip,‘*‘ 代表所有

ALLOWED_HOSTS = [‘*‘,‘127.0.0.1’,‘192.168.19.66’]
注:如想别人访问你的网站,需在启动项目时将ip配置为0.0.0.0,如何将运行项目的ip写入上面列表,用户就可以通过你的主机ip访问你的网站了

1.3、配置INSTALLED_APPS,为创建的应用app进行注册,不然操作数据库时报错

格式:‘app_name.Apps.AppName.Config‘ 或 ‘app_name’

INSTALLED_APPS = [
    ‘classModel.apps.ClassmodelConfig‘
]    

1.4、配置中间件MIDDLEWARE,注释csrf,让后台能够接收所有的post请求,不关闭django将对不合法的post拦截403

将 ‘django.middleware.csrf.CsrfViewMiddleware‘注释掉,否则会出现下面的情况。

技术分享图片

 

 技术分享图片

注:上面的方案,不建议使用,不安全,可以在html文件中要发送post请求的from表单里加入{% csrf_token %}就不用注释上面的csrf的中间件了

如下图:

技术分享图片

 

前端实际效果为:

 

技术分享图片

 

 

1.5、配置模块templates 中的DIRS需要检查下是否为空,如果为空,添加上os.path.join(BASE_DIR,‘templates‘)

命令创建的项目未创建模板templates目录,需自己创建。

技术分享图片

这是模板中没有设置,设置模板在python安装目录中找到如下图的路径,打开settings.py-tpl,相同位置添加上上os.path.join(BASE_DIR,‘templates‘)。下次创建项目就可不再手动添加。

技术分享图片

1.6、settings.py中增加静态文件目录STATICFILES_DIRS【(js,css,image)存放目录】,这是放在templates中html文件能够使用js,css资源的关键

在项目根目录即与manage.py文件同级下创建静态文件夹static,如果有多个就创建多个,但网页中不论是放在那个文件中,开始都以/static/开头

技术分享图片

1.7、templates文件夹下创建/或存放HTML文件,将html的js,css,imgs等文件放入images

技术分享图片

  2、编辑urls.py文件,增加映射关系。

 业务函数的实现,业务函数与url的映射可都在此文件中书写,以后规范化,可将业务函数移入到应用的views.py中,此文件仅编辑业务函数与url的映射关系,再导入views.py中所有的业务函数

from app名 import views

技术分享图片

下图为:直接将视图函数写在全局urls.py文件中

技术分享图片

八、访问web

  1、局域网中的浏览器输入HTTP://IP:PORT/login 就可访问验证。

九、如何完全的删除一个应用app? 

1.删除models.py 

  无论是删除一个单独的model还是删除整个App,都需要首先删除models.py文件中的模型。

确认没有其他文件引用models.py中的类。

迁移或者删除你的数据库,Django提供了简便的方法方便用户删除某App下的所有数据(Django 1.7)。

python  manage.py migrate your_app_name zero   

  删除models.py中的数据模型。

2.删除App

  再次确认其他App中没有引用此App的文件

  删除整个App文件夹

  在settings.py的Installed Apps中移除该app

  在urls.py中移除该App相关内容。 

 十、Django快速开发配置小结:

在app的models.py创建类(即数据库中的表)
在views.py下创建业务视图函数[导入orm模块]
  from django.shortcuts import render
  from django.shortcuts import HttpResponse
  from django.shortcuts import redirect
  from classModel import models

在django的templates目录下创建前端html文件
在在django的static目录下存放js,css.images 文件
在urls.py下建立映射关系
  from classModel import views

以上是关于Django框架-基础篇的主要内容,如果未能解决你的问题,请参考以下文章

Python自动化开发学习18-Django基础篇

02-Django-基础篇-Django介绍

Python Web框架Django框架第一篇基础

Django框架-基础篇

框架----Django框架(基础篇)

django基础篇