简介:html
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型Model,模板Template和视图View。此框架设计模式借鉴了MVC框架的思想,MVC是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具备耦合性低、重用性高、生命周期成本低等优势。python
下载:正则表达式
官网下载页面:https://www.djangoproject.com/download/django
安装:以Windows为例,设计模式
其余操做系统的安装参考:http://www.runoob.com/django/django-install.html浏览器
cmd命令:等号后面填写要下载的版本号
pip install django==1.11.9
建立一个Django项目:session
cmd命令:
django-admin startproject 项目名称
启动Django项目:架构
在Django项目目录下运行命令:
python manage.py runserver IP:端口
配置settings.py文件:app
1,模板文件框架
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, "template")], # 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', ], }, }, ]
2,静态文件
STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), # 静态文件存放位置 ]
3,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', ]
Django基础使用工具:
from django.shortcuts import HttpResponse, render, redirect
1,HttpResponse
# 接收一个字符串参数,返回给浏览器 def test(request): return HttpResponse("OK")
2,render
# 接收一个request参数和模板文件,动态填充数据给模板文件时,
还能够添加一个字典类型的参数,这些数据能够在模板文件中经过特定格式拼接到文件中而后返回给浏览器。 def test(request): return render(request, "test.html", {"name": "tom", "age": 18})
3,redirect
# 接收一个URL参数,会跳转到此URL进行访问。 def test(request): return redirect("/test/") # 能够是外网的URL也能够是当前项目中的URL
APP功能模块:
一个Django项目能够分为多个APP,用来隔离项目中不一样功能模块的代码。
1,建立app
# 命令行运行 python manage.py startapp app名字
路由系统:
URL与视图系统之间的映射关系。
1,映射格式
# 在urls.py文件中 from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ]
url参数:
2,正则分组匹配
from django.conf.urls import url from . import views urlpatterns = [ url(r'^test/([0-9]{4})/$', views.test), ]
正则表达式分组匹配(经过圆括号)能够捕获URL中的值并以位置参数形式传递给视图。
3,分组命名匹配
from django.conf.urls import url from . import views urlpatterns = [ url(r'^test/(?P<num>[0-9]{4})/$', views.test), ]
分组命名匹配的正则表达式组能够捕获URL中的值并以关键字参数形式传递给视图。
ps:视图函数经过参数接收到的数据都是字符串格式的!
分组命名匹配能够传递关键字参数,那么就能够在视图函数指定默认参数来提供默认值。例如:
# urls.py中 from django.conf.urls import url from . import views urlpatterns = [ url(r'^blog/$', views.page), url(r'^blog/page(?P<num>[0-9]+)/$', views.page), ] # views.py中,能够为num指定默认值 def page(request, num="1"): pass
4,include方法
当有多个APP功能模块时,url映射关系都写在项目目录下的urls.py中就比较容易混乱,因此通常会在对应的APP下面新建一个urls.py来设定自身的映射。这时候就能够使用include在项目urls.py中给不一样的url请求指定对应的APP下面的urls.py,从而完成不一样功能请求的匹配。
from django.conf.urls import include, url urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^blog/', include('blog.urls')), # 指定到博客功能APP下面的urls url(r'^news/', include('news.urls')), # 指定到新闻功能APP下面的urls ]
5,别名的使用
url(r'^home', views.home, name='home'), # 给个人url匹配模式起名为 home # 在函数中引用 from django.urls import reverse reverse("home")
{% url 'home' %}
当进行分组匹配时,就会须要参数,这时的引用方式为:
# 函数中 reverse('别名', args=(参数, )) # 模板中 {% url '别名' 参数 %}
命名空间模式:能够经过命名空间能够在不一样的APP中解析出惟一的URL。
# 项目目录下的urls.py from django.conf.urls import url, include urlpatterns = [ url(r'^app01/', include('app01.urls', namespace='app01')), url(r'^app02/', include('app02.urls', namespace='app02')), ]
解析使用方式:
# 函数中使用 reverse('app01:别名') # 解析出app01下面的某个分组匹配对应的url # 模板中使用 {% url 'app01:别名' %}