python【第十八篇】Django基础
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),即模型
|
放置模型
|
- 用于创建模型的对象关系映射
- 为最终用户设计的完美管理界面
- 一流的 URL 设计
- 设计者友好的模板语言
- 缓存系统。
这些我们都将在以后陆续讨论。
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基础的更多相关文章
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)
第十八篇(书中 8.5~8.7 节 内容) 其实语法篇,我感觉没必要写录入到日记里. 我也犹豫了好久,到底要不要录入. 这样,我先读一遍语法篇的所有内容,我觉得值得留下的,我就录入日记里. 不然像昨天 ...
- Python开发【第十八篇】Web框架之Django【基础篇】
一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...
- Python学习(二十六)—— Django基础一
转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...
- Android UI开发第二十八篇——Fragment中使用左右滑动菜单
Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...
- 【Python之路】第二十二篇--Django【基础篇】
1 Django流程介绍 MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业 ...
- Python之路【第十八篇】Django小项目webQQ实现
WEBQQ的实现的几种方式 1.HTTP协议特点 首先这里要知道HTTP协议的特点:短链接.无状态! 在不考虑本地缓存的情况举例来说:咱们在连接博客园的时候,当tcp连接后,我会把我自己的http头发 ...
- Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点
开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...
- Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识
本节内容 JavaScript 正则表达式 Django初识 正则表达式 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...
随机推荐
- 【转】C++ 类中的static,const,及引用类型的初始化
文档主要来自:http://blog.csdn.net/yjkwf/article/details/6067267 1. static类型 用static可以为类类型的所有对象所共有,像是全局对象,但 ...
- 初学ios遇到问题记录01
刚刚接触IOS,花了一段时间看我基础部分的OC后 就想试着弄个小程序,于是看到 http://www.cnblogs.com/LooDo/p/3907064.html博文中的小程序,博主分析的很详细, ...
- jfinal文件上传和form表单值为null的解决方法
今天使用jfinal做上传提交的时候,遇到一个问题:添加了上传功能,原来的form表单submit提交时所有值都为null了,研究了很长时间,终于发现 在jfinal上传时候,jsp加 enctype ...
- 电话qie听器
业务逻辑: 当有电话打进来或电话打出去的时候,对电话进行录音. public class TelphoneyListenerService extends Service { private stat ...
- android96 内存创建图片副本,画画板
package com.itheima.copy; import android.os.Bundle; import android.app.Activity; import android.grap ...
- SecureCRT恢复默认字体
1\要想永久的改变的就跟我来吧,选项--全局选项--常规--默认会话--编辑默认设置--外观--当前颜色方案--选择自己喜欢的方案就行啦,然后选择保存就OK啦方案二: 自从装了Win7之后,觉得sec ...
- Linux--------------安装vim
1.相关提示 -bash: vim: command not found 2.查看vim是否安装 rpm -qa|grep vim vim-en ...
- “DBUtility.DbHelperSQL”的类型初始值设定项引发异常 “DBUtility.DbHelperSQL”的类型初始值设定项引发异常
今天遇到了一个这样的问题“DBUtility.DbHelperSQL”的类型初始值设定项引发异常“DBUtility.DbHelperSQL”的类型初始值设定项引发异常 也许有和我遇到这问题的人也在这 ...
- maven项目转换成dynamic项目
由于maven项目不能直接运行调试需要转换成danamic web后,才能方便进行调试测试.以下是maven项目进行转换的过程 第一步,选择project faces,设置dynamic web版本. ...
- Bind开启IPv6功能
[root@localhost sbin]# ./named -v bind 9.5.1-p3-v3.0.9 1,服务器开启IPv6服务 网卡配置v6地址 [root@localhost ~]# if ...