MVC(model view controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(model)、视图(view)和控制器(controller),具备耦合性低,重用性高,生命周期成本低等优势。css
Django框架的设计模式借鉴了MVC框架的思想,也是分别三部分,来下降各个部分之间的耦合性。html
Django的MTV分别表明:前端
Model(模型):和数据库相关的,负责业务对象与数据库的对象(ORM)python
Template(模板):放全部的html文件,负责如何把页面展现给用户mysql
模板语法:目的是将自变量(数据库的内容)如何巧妙的嵌入到html页面中web
View(视图):负责业务逻辑,并在适当的时候调用Model和Templatesql
此外,Django还有一个URL分发器。它的做用是将一个个URL的页面请求分别发给不一样的Views处理,Views再调用相应的Model和Template。shell
查看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 -->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
生成目录结构以下:
注:命令行建立,不会建立templates模板【用于仅存放html文件,css,js等静态文件放到新建的static目录中】,
须要本身在项目根目录即与manage.py同级目录下建立templates文件夹,且要到settings.py中修改templates的DIRS中加入os.path.join(BASE_DIR,'templates')
打开pycharm--->file ---->new project ---> 选中django
建立完成后项目目录结构以下:
注:上面app01为建立的一个应用,Mysite为建立django目录时,自动在项目名下创建一个同名的目录。
切换到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和端口改成实际的
一个项目就是一个包,不要单独执行某个py文件,而是运行整个项目
注:由于一个项目要实现多个功能,所以一个Django项目能够分为不少个APP,用来隔离不一样功能模块的代码
若是不创建app也能够执行项目,即视图函数直接写在urls.py中,在settings.py中配置相关的模板,数据库信息,静态文件等信息。
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的manage.py工具来执行命名。在主菜单栏中选择Tools,在下拉菜单中选择Run manage.py task,会出现以下图所示的工具对话框:
在弹出的命令窗口中直接输入下面的命令即可建立app:
startapp app01
使用PyCharm的manage.py工具执行命令时,只用输入命令及参数便可,再也不输入python manage.py了。
建立完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文件内容以下图:
一、安装mysql数据库软件
二、安装 模块pymysql【python3.6后链接mysql只能用pymysql】
cmd--> pip3 install pymysql
三、手动链接数据库,建立一个库及建立一个操做此数据库的用户,赋予权限【django的ORM只能建立表,不能建立库】
# 建立库
create database db_name charset utf8;
# 建立用户及赋予权限
grant all privileges on db_name.* to 'userName'@'ip' identified by 'pwd';
四、在Django项目总配置文件setting.py同级目录下[不是app下的__init__]的__init__.py文件中配置项目使用pymysql来操做数据库
import pymysql
pymysql.install_as_MySQLdb() # 告知django使用pymysql来链接书库
五、在Django项目总配置文件setting.py中的DATABASES模块中配置链接数据库相关信息,格式以下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 修改数据库引擎,默认为sqlite3文本数据库
'NAME': 'db_name',
'USER': '**',
'PASSWORD':'***',
'HOST':'ip',
'PORT': 3306, # 注意是数字,不是字符串
}
}
六、建表 在应用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中
类 对应数据库中的 表
对象 对应数据库中的 记录(数据行)
属性 对应数据库中的 字段
七、建好类即表后,执行数据库迁移命令【让建立的表在数据库中生成】
# 记录models.py中类是否是有变化 将变化的内容记录下来
python manage.py makemigrations
# 将model的变动同步到数据库中
python manage.py migrate
注:执行第一条命令后models.py中的变化就会在到migrations目录中建立一个新的文件并将变化写入其中
若是在原有表张增长字段的话,会提示要设置默认值,由于新的那列数据不能为空
1.一、检查项目BASE_DIR是否以下:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
1.二、配置ALLOWED_HOSTS能够运行本项目的ip,'*' 表明全部
ALLOWED_HOSTS = ['*',‘127.0.0.1’,‘192.168.19.66’]
注:如想别人访问你的网站,需在启动项目时将ip配置为0.0.0.0,如何将运行项目的ip写入上面列表,用户就能够经过你的主机ip访问你的网站了
1.三、配置INSTALLED_APPS,为建立的应用app进行注册,否则操做数据库时报错
格式:'app_name.Apps.AppName.Config' 或 ‘app_name’
INSTALLED_APPS = [
'classModel.apps.ClassmodelConfig'
]
1.四、配置中间件MIDDLEWARE,注释csrf,让后台可以接收全部的post请求,不关闭django将对不合法的post拦截403
将 'django.middleware.csrf.CsrfViewMiddleware'注释掉,不然会出现下面的状况。
注:上面的方案,不建议使用,不安全,能够在html文件中要发送post请求的from表单里加入{% csrf_token %}就不用注释上面的csrf的中间件了
以下图:
前端实际效果为:
1.五、配置模块templates 中的DIRS须要检查下是否为空,若是为空,添加上os.path.join(BASE_DIR,'templates')
命令建立的项目未建立模板templates目录,需本身建立。
这是模板中没有设置,设置模板在python安装目录中找到以下图的路径,打开settings.py-tpl,相同位置添加上上os.path.join(BASE_DIR,'templates')。下次建立项目就可再也不手动添加。
1.六、settings.py中增长静态文件目录STATICFILES_DIRS【(js,css,image)存放目录】,这是放在templates中html文件可以使用js,css资源的关键
在项目根目录即与manage.py文件同级下建立静态文件夹static,若是有多个就建立多个,但网页中不管是放在那个文件中,开始都以/static/开头
1.七、templates文件夹下建立/或存放HTML文件,将html的js,css,imgs等文件放入images
业务函数的实现,业务函数与url的映射可都在此文件中书写,之后规范化,可将业务函数移入到应用的views.py中,此文件仅编辑业务函数与url的映射关系,再导入views.py中全部的业务函数
即from app名 import views
下图为:直接将视图函数写在全局urls.py文件中
一、局域网中的浏览器输入HTTP://IP:PORT/login 就可访问验证。
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相关内容。
在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