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. Enum枚举类|注解Annotation

    Enum枚举类 ①枚举类和普通类的差别: 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类 枚举类的构造器仅仅能使用 private 訪问控制符 枚举类的全部实例必须在枚举类中 ...

  2. POJ 3670 , 3671 LIS

    题意:两题意思差不多,都是给你一个序列,然后求最少需要改变多少个数字,使得成为一个最长不升,或者最长不降子序列. 当然3671是只能升序,所以更简单一点. 然后就没有什么了,用二分的方法求LIS即可. ...

  3. cocos2dx jsb 在IOS与安卓下的一些不同之处

    cocos2dx版本 2.1.4 1:字体大小 cocosbuilder publish后应该注意IOS和安卓目录下的字体文件的规格是否齐全: 2:cc.LabelTTF 在ios下,cc.Label ...

  4. js操纵cookie技术

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  5. 线程间操作无效 progressBar2线程不能被访问

    出现这个问题解决的方法有两种第一种就是使用 // Form1.CheckForIllegalCrossThreadCalls = false;//不对跨线程的调用 使用这个的时候是判断线程是否运行正常 ...

  6. R-大数据分析挖掘(5-R基础回顾)

    (一)R函数 R是一种解析型语言,输入后可直接获取结果 函数(输入参数,参数) R的函数分为“高级”和“低级函数” • 高级函数可调用低级函数 • 高级函数称为泛型函数 • 函数名  <-­‐ ...

  7. eclipse 好用的快捷键

    Ctrl+Shift+X 把当前选中的文本全部变味小写 Ctrl+Shift+Y 把当前选中的文本全部变为小写 Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定) ...

  8. 并行计算vs分布式计算

    一般认为,集中在同一个机柜内或同一个地点的紧密耦合多处理机系统或大规模并行处理系统是并行处理系统,而用局域网或广域网连接的计算机系统是分布式处理系统.松散耦合并行计算机中的并行操作系统有时也称为分布式 ...

  9. sql 几个常用函数

    ROUND 用法: --15.000 表示小数点第一位取四舍五入,将原小数点后的位数都设置为0SELECT ROUND(15.258,0) --15.300,第二个参数如果是1,则取原值小数点后第一位 ...

  10. JS七种加密解密方法

    http://www.cnblogs.com/mq0036/p/4983858.html HTML或JS加密解密 本文一共介绍了七种方法:   一:最简单的加密解密   二:转义字符"\&q ...