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. 转换流--OutputStreamWriter类与InputStreamReader类

    12.4  转换流--OutputStreamWriter类与InputStreamReader类 整个IO包实际上分为字节流和字符流,可是除了这两个流之外,还存在一组字节流-字符流的转换类. Out ...

  2. Android 颜色渲染(七) RadialGradient 环形渲染实现水波纹效果

    利用环形渲染我们可以做到什么? 其实很多都是非常常见的,比如上一篇实现的帮帮糖效果, 彩色的热气球,比如这里要讲到的水波纹效果,或者也可以理解为扩散色渲染效果 首先看一下效果图: 轻触屏幕,即可看到对 ...

  3. 【转】GitHub删除一个仓库——2013-08-27 21

    http://xiacijian.blog.163.com/blog/static/849931902012111195041170/ 1.进入要删除的仓库 2.找到 导航栏 Code  NetWor ...

  4. js渐变显示渐变消失

    以下是渐变的js代码(表示多余三行的要隐藏,点击"more"显示剩下的,点击“less”要逐渐隐藏): function showAccomplishmentTableRow(){ ...

  5. linux atime ctime mtime

    touch testtime 1. stat testtime[为文件名] 可以查看这个文件名的三者状态 2.ll testtime;ll --time=atime testtime ;ll --ti ...

  6. MySQL5.7.12新密码登录方式及密码策略

    在Centos6.6上安装MySQL5.7.12时,遇到了一个问题 安装后在/root目录下没有发现有.mysql_secret这个文件,所以没有没法按照官方文档上说的那样使用,这里记录下, 解决方式 ...

  7. 编译inotify报错

    错误如下: configure: error: no acceptable C compiler found in $PATH 这是因为没有找到编译器的原因造成的 解决方法: 安装gcc [root@ ...

  8. css怎么写链接到图片和地址

  9. Ajax异步的回调函数执行了多遍

    问题: 在做下拉滚动加载时(类似于qq空间下拉加载),数据向下滚动一次,就会加载一次,即append一下,跟踪js后,发现回调函数执行了多次,导致append将上次的append结果append上了, ...

  10. 使用Eclipse提供的Axis1.x生成WSDL文件以及Server和Client代码

    使用Eclipse自带的Axis 1.x来创建一个web service应用的服务端和客户端 Axis 是SOAP WebService协议实现,SOAP实质上是一个基于HTTP POST的请求,以X ...