Django

  简介:

  Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型Model,模板Template和视图View。此框架设计模式借鉴了MVC框架的思想,MVC是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

        

  下载:

  官网下载页面:https://www.djangoproject.com/download/

  安装:以Windows为例,

    其他操作系统的安装参考:http://www.runoob.com/django/django-install.html

  1. cmd命令:等号后面填写要下载的版本号
  2. pip install django==1.11.9

  创建一个Django项目:

  1. cmd命令:
  2. django-admin startproject 项目名称

  启动Django项目:

  1. Django项目目录下运行命令:
  2. python manage.py runserver IP:端口

  配置settings.py文件:

    1,模板文件

  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [os.path.join(BASE_DIR, "template")], # template文件夹位置
  5. 'APP_DIRS': True,
  6. 'OPTIONS': {
  7. 'context_processors': [
  8. 'django.template.context_processors.debug',
  9. 'django.template.context_processors.request',
  10. 'django.contrib.auth.context_processors.auth',
  11. 'django.contrib.messages.context_processors.messages',
  12. ],
  13. },
  14. },
  15. ]

    2,静态文件

  1. STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀
  2. STATICFILES_DIRS = [
  3. os.path.join(BASE_DIR, "static"), # 静态文件存放位置
  4. ]

    3,csrf中间件:用于验证用户表单提交,刚开始使用可以先注释掉,方便测试

  1. MIDDLEWARE = [
  2. 'django.middleware.security.SecurityMiddleware',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. 'django.middleware.common.CommonMiddleware',
  5. # 'django.middleware.csrf.CsrfViewMiddleware',
  6. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  7. 'django.contrib.messages.middleware.MessageMiddleware',
  8. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  9. ]

  Django基础使用工具:

  1. from django.shortcuts import HttpResponse, render, redirect

    1,HttpResponse

  1. # 接收一个字符串参数,返回给浏览器
  2. def test(request):
  3. return HttpResponse("OK")

    2,render

  1. # 接收一个request参数和模板文件,动态填充数据给模板文件时,
    还可以添加一个字典类型的参数,这些数据可以在模板文件中通过特定格式拼接到文件中然后返回给浏览器。
  2. def test(request):
  3. return render(request, "test.html", {"name": "tom", "age": 18})

    3,redirect

  1. # 接收一个URL参数,会跳转到此URL进行访问。
  2. def test(request):
  3. return redirect("/test/") # 可以是外网的URL也可以是当前项目中的URL

  APP功能模块:

  一个Django项目可以分为多个APP,用来隔离项目中不同功能模块的代码。

    1,创建app

  1. # 命令行运行
  2. python manage.py startapp app名字

  路由系统:

URL与视图系统之间的映射关系。

1,映射格式

  1. # 在urls.py文件中
  2. from django.conf.urls import url
  3.  
  4. urlpatterns = [
  5. url(正则表达式, views视图函数,参数,别名),
  6. ]

url参数:

  • 正则表达式:一个正则字符串,用于匹配请求的url 
  • views视图函数:一个定义好的视图函数,用于处理对应的url请求
  • 参数:可以不传,一个字典类型的数据,用于给视图函数传递默认参数
  • 别名:可以不传,name=值,给映射起别名,用于其他地方通过别名获取url

2,正则分组匹配

  1. from django.conf.urls import url
  2.  
  3. from . import views
  4.  
  5. urlpatterns = [
  6. url(r'^test/([0-9]{4})/$', views.test),
  7. ]

正则表达式分组匹配(通过圆括号)可以捕获URL中的值并以位置参数形式传递给视图。

3,分组命名匹配

  1. from django.conf.urls import url
  2.  
  3. from . import views
  4.  
  5. urlpatterns = [
  6. url(r'^test/(?P<num>[0-9]{4})/$', views.test),
  7. ]

分组命名匹配的正则表达式组可以捕获URL中的值并以关键字参数形式传递给视图。

ps:视图函数通过参数接收到的数据都是字符串格式的!

分组命名匹配可以传递关键字参数,那么就可以在视图函数指定默认参数来提供默认值。例如:

  1. # urls.py中
  2. from django.conf.urls import url
  3.  
  4. from . import views
  5.  
  6. urlpatterns = [
  7. url(r'^blog/$', views.page),
  8. url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
  9. ]
  10.  
  11. # views.py中,可以为num指定默认值
  12. def page(request, num=""):
  13. pass

4,include方法

当有多个APP功能模块时,url映射关系都写在项目目录下的urls.py中就比较容易混乱,所以一般会在对应的APP下面新建一个urls.py来设定自身的映射。这时候就可以使用include在项目urls.py中给不同的url请求指定对应的APP下面的urls.py,从而完成不同功能请求的匹配。

  1. from django.conf.urls import include, url
  2.  
  3. urlpatterns = [
  4. url(r'^admin/', admin.site.urls),
  5. url(r'^blog/', include('blog.urls')), # 指定到博客功能APP下面的urls
  6. url(r'^news/', include('news.urls')), # 指定到新闻功能APP下面的urls
  7. ]

5,别名的使用

  1. 在项目函数中获取对应的url匹配:通过reverse来完成反向解析

    1. url(r'^home', views.home, name='home'), # 给我的url匹配模式起名为 home
    2.  
    3. # 在函数中引用
    4. from django.urls import reverse
    5.  
    6. reverse("home")
  2. 在模板文件中引用
    1. {% url 'home' %} 

当进行分组匹配时,就会需要参数,这时的引用方式为:

  1. # 函数中
  2. reverse('别名', args=(参数, ))
  3.  
  4. # 模板中
  5. {% url '别名' 参数 %}

命名空间模式:可以通过命名空间可以在不同的APP中解析出唯一的URL。

  1. # 项目目录下的urls.py
  2. from django.conf.urls import url, include
  3.  
  4. urlpatterns = [
  5. url(r'^app01/', include('app01.urls', namespace='app01')),
  6. url(r'^app02/', include('app02.urls', namespace='app02')),
  7. ]

解析使用方式:

  1. # 函数中使用
  2. reverse('app01:别名') # 解析出app01下面的某个分组匹配对应的url
  3.  
  4. # 模板中使用
  5. {% url 'app01:别名' %}

  

PythonWeb框架之Django的更多相关文章

  1. 16 . PythonWeb框架之Django

    Web框架简介 Web开发是Python语言应用领域的重要部分,也是目前最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django.Tornado.Flask.Twist ...

  2. 15 . PythonWeb框架本质

    PythonWeb框架的本质 简单描述就是:浏览器通过你输入的网址给你的socket服务端发送请求,服务端接受到请求给其回复一个对应的html页面,这就是web项目.所有的Web应用本质上就是一个so ...

  3. python框架之django

    python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...

  4. 循序渐进Python3(十二) --1--  web框架之django

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...

  5. python web框架——扩展Django&tornado

    一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...

  6. 两个Python web框架:Django & Tornado比较

    就是说它作为 web 框架比 Django 简单,又支援异步 IO,且更不需要前端的 webserver ? 我已经混乱了, Tornado是 Nginx.Django.Node.js 的结合体?又或 ...

  7. 第六篇:web之python框架之django

    python框架之django   python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...

  8. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  9. Python开发【第二十一篇】:Web框架之Django【基础】

    Python开发[第二十一篇]:Web框架之Django[基础]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...

随机推荐

  1. 【笔记】http协议笔记

    本文是本人在复习http协议时,手动整理的资料,以备后续查阅. http(hypertext transfer protocol):超文本协议.是万维网(world wide web,www,也简称为 ...

  2. ubuntu 安装 lrzsz 上传下载

    原文:ubuntu 安装 lrzsz 上传下载 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/article/details/808223 ...

  3. npm run dev 和 npm run serve

    1.ERR引发的思考 创建好的 vue 项目直接执行 vue run dev 报错?运行 vue run serve 就可以启动...如下 npm run dev npm ERR! missing s ...

  4. mysql更改密码

    mysql command line client输入密码以后闪退问题的解决: 网上搜到的解决办法(my.ini文件之类的修改对我都没有起到作用).. 所以觉得是自己密码的问题,因为许久不用这个软件了 ...

  5. python字典排序取最值总结

    dic = {"abc":18,"adc":19,"abe":20} # 默认对键排序,从小到大,返回排序后键组成的列表 zidian = ...

  6. nginx与apache

    参考链接:https://www.cnblogs.com/changning0822/p/7844004.html

  7. Python 基于 NLP 的文本分类

    这是前一段时间在做的事情,有些python库需要python3.5以上,所以mac请先升级 brew安装以下就好,然后Preference(comm+',')->Project: Text-Cl ...

  8. 只想着一直调用一直爽, 那API凭证泄漏风险如何破?

    如今各家云厂商都通过给用户提供API调用的方式来实现一些自动化编排方面的需求.为了解决调用API过程中的通信加密和身份认证问题,大多数云厂商会使用同一套技术方案—基于非对称密钥算法的鉴权密钥对,这里的 ...

  9. time 与 data time

    >>> import datetime>>> datetime.datetime.now()datetime.datetime(2018, 5, 30, 15, 3 ...

  10. ios开发――解决UICollectionView的cell间距与设置不符问题

    在用UICollectionView展示数据时,有时我们希望将cell的间距调成一个我们想要的值,然后查API可以看到有这么一个属性: - (CGFloat)minimumInteritemSpaci ...