1.什么是Django?

  Django是一个Python写成的开源Web应用框架。python流行的web框架还有很多,如tornado、flask、web.py等。django采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

2.Django的MTV框架

  前文说jango是MVC框架模式,但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:

层次
职责
模型(Model),即数据存取层
处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
视图(View),即表现层
处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。模型与模板的桥梁。
模板(Template),即模型
放置模型
Django 框架的核心组件有:
  1. 用于创建模型的对象关系映射
  2. 为最终用户设计的完美管理界面
  3. 一流的 URL 设计
  4. 设计者友好的模板语言
  5. 缓存系统。

这些我们都将在以后陆续讨论。

3.创建django工程

前提是首先要安装python3的django模块,没有安装请pip install django或自行百度谷歌。

Windows下,进入cmd命令窗口输入:django-admin startproject firstsite回车即可创建django工程,其中firstsite为工程名。如下图

这时候桌面就有一个同名的文件夹,用pycharm打开它,目录如下图:

图中:

django工程名

2 是与工程名同名子目录,里面放的是django配置文件、路由系统文件、依赖的wsgi等

3 是什么?你不知道么

就是django的配置文件,很多都需要你自己配置,比如数据库,模板目录,静态文件等

是django的路由系统(路由映射系统)

WSGI配置,遵循WSIG规范,需要的时候配置,也可用uwsgi

7 就是管理Django的程序,通过这个文件提供的功能,我们可以通过命令创建app,创建表等,后续会详细讲解

4 创建app

  上面已经创建了一个django工程,接下来就应该创建app了,那么,我们为什么要创建app,app和project有什么区别?

project是我们的整个工程,而app就是对整个工程的分类。一个project有多个app,比如现在有一个运维后台管理系统(相当于project),他有很多板块:资产管理、堡垒机、监控。私有云等,是不是应该每个板块搞一个独立的app比较好呢?

创建app:

在命令窗口输入:python manage.py startapp app01

这里我们是不是用到了前文说的manage.py这个django的管理程序了呢?

这样我们就创建好了一个名字叫做app01的app了。看一下目录中是不是有了呢?没有就刷新一下。

migrations这个文件的作用是当你做增删数据库的操作时的它会做相应的记录,admin.py 是提供了后台管理的平台,test.py是用来写单元测试的!

那么models.py和views.py这个两个文件呢?有木有很熟悉啊,前文我们是不是提到了MTV模式,回过去看看。这里它俩就是M和V了?那么T呢?没有~~~~,既然没有T我们就给他创建一个。在工程名目录下,创建一个templates文件夹,好了,这就是我们的T了,就这么简单!

当然如果用pycharm创建的django工程,会在app目录下自动生成一个templates文件夹,用就保留然后配置(后面会讲怎么配置),不用的话删了重新创建也行。

接下来,我们该完成一次http请求了。

5 路由系统

前文已说,urls.py是路由(映射)系统,现在打开它,添加一句:

 """firstsite URL Configuration
     ...
     2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
 """
 from django.conf.urls import url
 from django.contrib import admin
 from app01 import views

 urlpatterns = [
     url(r'^admin/', admin.site.urls),
     url(r'^index/', views.index),
 ]

路由映射,顾名思义,当请求来是,我们先在url.py中找到相应的url,然后映射到views中的函数,把请求交给views中的函数去处理。

这里我交给views中的index函数处理了,记得从app01中导入views。

补充一下:django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而使路由系统变得简洁。

那么我们需要在views中写我们的index函数了,如下:

 from django.shortcuts import render,HttpResponse

 def index(request):
     """在此之前必须得导入HttpResponse,这里是django对我们的返回进行了一次封装"""

     return HttpResponse("<h1>Hello Django!<h1>")

接下来,我们先运行django工程,在命令行中输入:python manage.py runserver 127.0.0.1:8888,然后访问http://127.0.0.1:8888/index就可以看到Hello Django!了。

这里我们返回的是<h1>标签,那么我们是不是可以返回一个HTML文档呢?当然可以。

6 模板文件

在templates文件中放入写好的html文件,这里我的测试文件是index.html

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         label{
             width: 80px;
             text-align: right;
             display: inline-block;
         }
     </style>
 </head>
 <body>
     <form action="/login/" method="post">
         <p>
             <label for="username" >用户名:</label>
             <input id="username" name ="user" type="text" />
         </p>
         <p>
             <label for="password">密码:</label>
             <input id="password" name="pwd" type="password" />
             <input type="submit" value="提交" />
             <span style="color: red">{{ error_msg }}</span>
         </p>
     </form>
 </body>
 </html>

注意:如果你是cmd创建的django工程,需要到settings里面去把templates文件的路径作一下配置,到settings中添加一行(下图中红色);

如果是pycharm创建的django工程,可能默认已经有路径了。

 TEMPLATES = [
     {
         'BACKEND': 'django.template.backends.django.DjangoTemplates',
 4         'DIRS': [os.path.join(BASE_DIR, 'templates')],
         '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',
             ],
         },
     },
 ]

我们还需要到views中修改一下index函数:

 from django.shortcuts import render

 def index(request):
     """
     render在这里做了一些工作:
     找到index.html文件,返回给前端
     """
     return render(request, 'index.html')

重启django工程(pycharm中会自动重启),访问index页面就可以了

7 静态文件配置

django工程下目录下,创建static目录,放置静态文件用。

并且告诉django静态文件放在哪里了,在settings中进行配置,未见末尾添加下面内容:

 STATICFILES_DIRS = [
     (os.path.join(BASE_DIR, "static")),
 ]

接下来皆可以放置css和js文件了:

在html中引用css文件:

<link rel="stylesheet" href="/static/commons.css">

在html中引用js文件:

<script src="/static/login.js"></script>

python【第十八篇】Django基础的更多相关文章

  1. Python之路【第十八篇】:Web框架们

    Python之路[第十八篇]:Web框架们   Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...

  2. Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)

    第十八篇(书中 8.5~8.7 节 内容) 其实语法篇,我感觉没必要写录入到日记里. 我也犹豫了好久,到底要不要录入. 这样,我先读一遍语法篇的所有内容,我觉得值得留下的,我就录入日记里. 不然像昨天 ...

  3. Python开发【第十八篇】Web框架之Django【基础篇】

    一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...

  4. Python学习(二十六)—— Django基础一

    转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...

  5. Android UI开发第二十八篇——Fragment中使用左右滑动菜单

    Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...

  6. 【Python之路】第二十二篇--Django【基础篇】

    1 Django流程介绍 MTV模式       著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业 ...

  7. Python之路【第十八篇】Django小项目webQQ实现

    WEBQQ的实现的几种方式 1.HTTP协议特点 首先这里要知道HTTP协议的特点:短链接.无状态! 在不考虑本地缓存的情况举例来说:咱们在连接博客园的时候,当tcp连接后,我会把我自己的http头发 ...

  8. Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点

    开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...

  9. Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识

    本节内容 JavaScript 正则表达式 Django初识 正则表达式 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

随机推荐

  1. Sublime 格式化代码 快捷键以及插件使用

    来自Vic___:http://blog.csdn.net/vic___ 其实在sublime中已经自建了格式化按钮: Edit  ->  Line  ->  Reindent 只是sub ...

  2. DELPHI TDownLoadURL下载网络文件

      DELPHI XE6 FMX 附件:http://files.cnblogs.com/xe2011/IDHttp_fmx.7z unit Unit1; interface uses //引用 Vc ...

  3. [Canvas] Introduction to drawing with p5js

    In this lesson we look at using color and the basic drawing methods of p5js, and how they can be com ...

  4. QT 事件过滤器 eventFilter

    在监测的代码里执行需要的行为. 这可以用event Filter来达到. 设置一个event filter有两个步骤: 1. 在目标对象上调用installEventFilter(),将监测对象注册到 ...

  5. iOS 推送,当接到推送消息时如何处理?

    接收到通知时有两种进入的方式:1.当app未运行时(BOOL)application:(UIApplication *)application didFinishLaunchingWithOption ...

  6. jQuery动态实现title的修改 失效问题

    最近做了一个网站,一切都很顺利,在上线的时候,突然发现一个严重的问题,开始面对这个问题,完全不知所措(在goole.火狐.IE9及其以上都没得问题:IE8及其低版本都失效)只是浏览器弹出一个bug,但 ...

  7. 7.Composer的安装和使用

    1.安装Composer: 局部安装 要真正获取 Composer,我们需要做两件事.首先安装 Composer (同样的,这意味着它将下载到你的项目中): curl -sS https://getc ...

  8. Java并发——使用Condition线程间通信

    线程间通信 线程之间除了同步互斥,还要考虑通信.在Java5之前我们的通信方式为:wait 和 notify.Condition的优势是支持多路等待,即可以定义多个Condition,每个condit ...

  9. ThinkPHP函数详解:N方法

    N方法属于计数器方法,被用于核心的查询.缓存统计的计数和统计.但是其实可以用于应用的其他计数用途,用法比较简单,调用格式:N('计数位置'[,'步进值'])例如,我们要统计页面中的查询次数,可以用 N ...

  10. 关于sqlserver 2008 远程导入表数据

    /*不同服务器数据库之间的数据操作*/ --创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' ex ...