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. css z-index详解

    写css z-index的时候经常会出现很多莫名其妙的问题,下面对z-index属性做彻底的剖析,本文参考了<一个css中z-index的用法>,并做了很多demo,方便了解z-index ...

  2. 使用split进行分割时遇到特殊字符的问题

    使用split分割时: String[] a="aa|bb|cc".split("|"); output: [a, a, |, b, b, |, c, c] 先 ...

  3. phpcms 源码分析七: 模板引擎实现

    这次是逆雪寒对模板引擎实现的分析: 1 /* 函数 template函数是在global.func.php 里面定义的. 在前面的phpcms 的首页 index.php 里就见到了. 用法: inc ...

  4. Android源码解析--Quick Search in Settings

    欢迎大家加入群里交流:429664282 基于:android-6.0.1_r17 f4b8ad6 Android Settings中存在一个SearchIndexablesProvider,它提供了 ...

  5. [Form Builder]NAME_IN()与COPY()

    NAME_IN和COPY实际是间接引用,类似指针传递,而不是值传递... IF :VAR1 IS NULL ...  direct referenceIF NAME_IN ( :VAR1 ) IS N ...

  6. ubuntu系统安装redis

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串string,链表list,集 合set和有序集合zset.支持在服务器 ...

  7. Java RMI详解

    RMI:远程方法调用(Remote Method Invocation).能够让在某个java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法. RMI远程调用步骤: 1,客 ...

  8. 理解Objective-c中的copy

    说一下深拷贝和浅拷贝的基本概念:a指针指向地址A1, 浅拷贝是创建了一个b指针指向地址A1:深拷贝是创建了一个c指针指向地址A2,A1和A2的地址不同. 我们看到NSObject接口里面是已经声明了c ...

  9. 关于“VS2010语法检查红线不见了”的解决方案

    操作步骤:工具=>导入导出设置=>重置所有设置=>重置C#(一般选择这个,其他没试过) 等待1分钟,over.

  10. Linq常用查询运算符

    Linq一共包含五十几个查询运算符,常用的根据类型来区分一共有5类左右,这五类里面一些事在项目查询中经常用到的.不过linq运算符的命名十分规范,基本从字面意思就能猜测出来是干嘛用的,下面我们挑选一些 ...