Django框架简介
MVC框架和MTV框架
MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。
想要更详细的了解MVC模式? >> 点我
Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。
Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。
Django的MTV模式
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
Django框架图示
Django安装和基本使用
安装Django,指定国内pip源
pip3 install django==1.11.18 -i https://pypi.douban.com/simple/
创建Django项目
下面的命令创建了一个名为"webapp"的Django 项目:
django-admin startproject webapp
项目创建完成,会在当前目录下生成一个目录
webapp/ ├── manage.py # 管理文件 └── mysite # 项目目录 ├── __init__.py ├── settings.py # 配置 ├── urls.py # 路由 --> URL和函数的对应关系 └── wsgi.py # runserver命令就使用wsgiref模块做简单的web server
运行Django项目:
默认是8000端口
[root@yunwei-test webapp]# python3 manage.py runserver 0.0.0.0:9999
pycharm创建Django项目
pycharm会自动创建模板目录
启动项目
Django settings
# 项目根目录 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # ip地址访问权限 ALLOWED_HOSTS = ['*'] # app注册列表 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] # 中间件 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', ] # 模板文件(HTML文件) TEMPLATES [{ 'DIRS': [os.path.join(BASE_DIR, 'templates')] # HTML文件路径,pycharm会自动创建和添加。 命令行创建项目需要自己添加 }] # 数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # 数据库类型 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # 要连接的库 } } # 静态文件别名,以/static/开头 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') # 实际的静态文件目录路径 ]
Django创建 app
一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码。
python manage.py startapp app01
执行命令后,项目目录下多出一个app01的文件夹,目录结构如下:
[root@yunwei-test webapp]# tree app01/ app01/ ├── admin.py # admin管理后台 ├── apps.py # app ├── __init__.py ├── migrations # 数据库迁移的文件 │ └── __init__.py ├── models.py # ORM ├── tests.py └── views.py # 函数功能
在settings配置文件中注册app
# 在app列表中添加上
INSTALLED_APPS = [ 'app01.apps.App01Config' ]
Django函数
from django.shortcuts import HttpResponse, render, redirect
参数
必须接受一个参数 request
所有和浏览器请求相关的都在 request 中 request.method GET POST(大写) # 获取请求方式
request.POST.get('input中的name属性值') # 获取form表单提交的数据,字符串类型(form表单使用POST提交时)
request.GET # url地址上携带的参数 例如:http://127.0.0.1/login/?user=xxx&pwd=xxx 获取到的数据: <QueryDict: {'user': ['xxx'], 'pwd': ['xxx']}>
request.path_info # url路径
返回值
必须是一个HttpResponse对象
HttpResponse
内部传入一个字符串参数,返回给浏览器。
例如:
def index(request): # 业务逻辑代码 return HttpResponse("OK")
render
除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。
将数据填充进模板文件,最后把结果返回给浏览器。(类似于我们上面用到的jinja2)
例如:
def index(request): # 业务逻辑代码 return render(request, "index.html", {"name": "alex", "hobby": ["烫头", "泡吧"]})
redirect重定向
接受一个URL参数,表示跳转到指定的URL。
例如:
def index(request): # 业务逻辑代码 return redirect("/home/")
重定向
return redirect('/home/')