django url 生效_Django基础知识

最近开始看Django框架,对我来说时间一长必定会忘记,所以还是做做笔记!学Django之前还看了点关于Web框架的原理什么的。。。杂七杂八!!!

0x00 关于Web服务

A. Web间的通信

Web应用的本质就是一套socket服务器,而用户的浏览器就是socket客户端,因而最基本的Web框架就是一套socket的代码。

import socket

sk = socket.socket()

sk.bind(("127.0.0.1", 80))

sk.listen()

while True:

conn, addr = sk.accept()

data = conn.recv(8096)

conn.send(b"OK")

conn.close()

而这仅仅通过这一的代码,浏览器依然无法打开这个简单的网页,因为在浏览器与服务端进行通信的时候,有一套HTTP协议,简单的来说就是浏览器与服务器之间的通信必须按照一个标准的写法才可以完成通信。

HTTP协议对收发消息都进行了格式的要求

(HTTP GET请求)

(HTTP Response)

上面的代码无法打开网页,最主要的原因就是没有回复HTTP请求。而一个请求为什么可以打开这个相应的网页呢?在HTTP GET请求的请求行中,就有URL字段正是通过该字段可以网站对指定网页的访问。其主要是通过获取URL字段,相应的调用该字段的函数,从而发送网页的源码到浏览器中,浏览器通过渲染收到的代码后进行将网页渲染出来。

因而总得来说,Web框架的本质就是Socket之间的通信

B. Socket服务端功能划分

在Socket服务端主要有三件事情要做,首先是响应HTTP请求,并发送响应;其次是根据URL字段的不同,执行不同的函数,从而返回相应的页面;最后,就是通过替换页面中的字符串,从而实现动态网页(比如你访问某个页面,上面可以显示今天的日期,其实你明儿打开的还是同一个HTML文件,仅仅是将日期处的字段替换为了今天的日期而已)。总体概况如下:

责与浏览器收发消息(socket通信) –> wsgiref/uWsgi/gunicorn…

根据用户访问不同的路径执行不同的函数

从HTML读取出内容,并且完成字符串的替换 –> jinja2(模板语言)

C. 关于Web框架的分类

Web框架主要完成的任务就是上面的几个功能,而根据不同的Web实现的不同功能可以分为几个主流的框架类型。

以Tornado框架为代表的框架,则可以实现以上三个功能。

以Django框架为代表的框架,则可以后两个功能,第一个功能则需要第三方模块实现。

以Flask框架为代表的框架,则仅仅实现了第二个功能,第一和第三个功能则需要第三方模块来实现。

0x01 初始Django

A. Django框架的安装

在Django官网中可以看到每个办法的支援时间,看了下Django 1.11 LTS可以支援到明年,所以我安装的就是Django 1.11.8。

pip3 install django==1.11.8

安装好Django后可以在终端输入django-admin来测试看看,是否安装成功。

B. 创建一个Django项目

—命令行方式

django-admin startproject 项目名称

—Pycharm方式

File –> New project –> 左侧选Django –> 右侧填项目路径,并且勾选python.exe

之后在一个新窗口中打开。

C. Django文件目录

—文件结构

创建出来的Django项目的文件结构入下图。

默认创建出来没有那个static文件夹

urls.py中,主要存放着URL字段调用函数直接的关系。而函数又放在每个APP中的views.py中。

settings.py中,主要是存放一些Django的配置信息,入安装的APP、连接数据库的信息。

templates文件夹中,主要是方HTML文件的文件夹。

—关于settings.py

刚学python,对于settings.py有2个地方要注意。

首先,注释了settings.py中的’django.middleware.csrf.CsrfViewMiddleware’,这行代码,暂时禁用了csrf中间件,可以方便表单提交测试。

其次,这样你发送了HTML页面到浏览器中,会发现javascript、css、图片等静态文件并没有没有发送过去,因而需要将静态文件夹也发送过去。为了统一规范吧!都建立一个叫做static的文件夹,就是上图的那个文件夹了!之后就要打开settings.py去配置静态文件的路径了。

(设置静态文件的路径)

在STATIC_URL下方,静态文件夹的路径,如果也加static的话,那么可以拷贝下面的配置

STATICFILES_DIRS = [

os.path.join(BASE_DIR, "static")

]

之后在HTML中,将静态文件的路径设置前面加上/static/,入下图

注意这里的static不是文件夹的static,而是 STATIC_URL后面的static,也就无论你的静态文件放在哪个文件夹里,只要在STATICFILES_DIRS的列表中,这里只用写static即可生效,有点类似于静态文件的一个环境变量的总和吧!

D. 关于APP

在Django中,为了方便一个大的Django项目中的管理,通过引出APP的概念来实现一个不同APP管理不同的业务。urls.py中调用调用函数的部分,被调用的函数就放在APP中的views.py里了。

创建APP

在Django项目的根目录中输入以下命令即可创建APP

python manage.py startapp app名字

创建完毕APP之后,一定要到项目settings.py中进行APP的注册,不然会有一堆莫名其妙的问题。

其实可以只写app的名字即可,不过还是推荐写全。

0x02 第一个Django项目

接下来以创建一个简易的图书馆里系统的部分环节为例子,来讲述Django项目的编写。通过上面的内容,已经设置好了STATICFILES_DIRS、创建了APP等。

A 映射URL

Server后端收到HTTP请求后,提取出URL路径,之后将跳转到APP中的views.py文件中去读取相应的函数。这个路径与函数之间的映射关系首先是在项目中的settings.py中设置。

from django.conf.urls import url

from django.contrib import admin

from app01 import views

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^publisher-list/', views.publisher_list),

url(r'^add-publisher/', views.add_publisher),

url(r'^edit-publisher/', views.edit_publisher),

url(r'^book-list/', views.book_list),

url(r'^add-book/', views.add_book),

url(r'^edit-book/', views.edit_book),

]

通过在urlpatterns列表中指定路径及映射函数即可。路径的指示支援正则表达式,所以如果是要域名主页的还,那么可以写r’^$’。

B 编写视图Views

进入对应的APP中的views.py中,定义一个函数,函数名字为之前url映射中的后半部分,传入一个HttpRequest对象,一般情况下默认写为request。忽略下面代码中的ORM部分!!

from django.shortcuts import render, redirect, HttpResponse

from app01 import models

# Create your views here.

def publisher_list(request):

if request.GET:

id = request.GET.get("id", None)

del_obj = models.Publisher.objects.get(id=id)

del_obj.delete()

ret = models.Publisher.objects.all()

return render(request, "publisher_list.html", {"publiser": ret})

这样就创建出了一个最简单的Django项目了!!

C Django三件套render HttpResponse redirect

之前介绍了Web框架的本质其实就3点,关于socket通信和URL映射之前都介绍了,接下来就是给浏览器返回数据了。render、HttpResponse、redirect也是用的最多的三个方法,因而江湖美其名曰“Django”三件套。

a HttpResponse

由于视图(理解为views.py中的函数吧!)必须返回一个 HttpResponse 对象给浏览器,因而HttpResponse 方法就是最简单的直接传入字符串即可,已经被封装的无需转化为bytes对象。

b redirect

redirect就是重定向了,可以直接传入一个路径(如”/book-list/”)也可以直接传入一个网址。

c render

render最简单的方法就是直接返回一个渲染好的html页面

return render(request,"about.html")

这样就可以返回了一个静态的页面给浏览器。

如果要返回一个动态页面就需要在render函数中添加content参数了。具体的三件套的使用示例直接见下面的代码吧!

def edit_publisher(request):

id = request.GET.get("id", None)

edit_obj = models.Publisher.objects.get(id=id)

if request.method == "GET":

if id:

return render(request, "edit-publisher.html", {"publisher": edit_obj})

else:

return HttpResponse("无法选择要编辑的出版社!")

else:

new_name = request.POST.get("name", None)

if new_name != edit_obj.name:

edit_obj.name = new_name

edit_obj.save()

return redirect("/publisher-list/")

至于代码中的动态渲染页面还有ORM框架,等系统学习之后在单独的写笔记吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机是一种在什么控制下 自动高速,计算机是一种能对数字化信息进行自动高速运算的通用处....ppt...

计算机是一种能对数字化信息进行自动高速运算的通用处...第一章 概述 第2章 数据的表示 第3章 运算器与运算方法 3.1 基本组成 3.2 算术与逻辑单元 3.2.1 半加器与全加器 3.2.2 串行进位与并行进位 3.3 定点加、减法运算 3.3.1 补码定点加、减法 3.4 定点乘法运算 3…

dataset的去重计数 g2_向工程渣土运输车辆计数 漏洞损失说“不”

基建越来越扩张的今天,很多工地还在人工计数管理,漏洞巨大,不远改变思维,总觉得损失一点也没有什么,现在开始逐渐推行智慧工地渣土运输管理,没有跟上步伐的,迟早会被被市场和“甲方爸爸”抛弃&a…

服务器虚拟化底层系统安装,Hyper-V是底层的虚拟机程序,位于操作系统和硬件之间,很薄一层...

今天介绍Hyper-V是底层的虚拟机程序,Windows server 2008 R2如何启动Hyper-V虚拟机。小伙伴们可能不一定了解,Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似VMWare和Citrix Xen一样的基于Hypervisor的技术。通过Hyper-V功能&#xff0…

显示三维图片序列_SLAM结合三维检测

11.11---11.17​ 在此前一周进行yolo与cube slam整合的时候,采用ros通信的方式。存在两个问题:一个是darknet检测不到目标,就不对外发布检测结果,会造成检测结果和图片序列对不上。另一个问题是图片发布给darknet和cube slam的时间…

css表格一行删除线,EXCEL电子表格一行中间画一条删除线怎么画/excel表格如何划掉数据...

EXCEL表格里,有些字体中间被划掉了,怎么操作的?选中该单元格,右键设置单元格格式。勾选删除线即可。取消的话,就不勾。如何在Excel中的数字上划一横线选择数据,单击鼠标右键,“设置单元格格式”…

cc穿盾并发脚本_敢不敢模拟超过 5 万的并发用户?

阅读本文大概需要 6 分钟。来自:http://t.cn/ES7KBkW本文将从负载测试的角度,描述了做一次流畅的 5 万用户并发测试需要做的事情。你可以在本文的结尾部分看到讨论的记录。快速的步骤概要:编写你的脚本使用 JMeter 进行本地测试BlazeMeter 沙…

tomcat上传文件到不同服务器,使用SpringMVC进行跨服务器上传文件出现的那些坑

[1] 405 Method Not Allowed原因是因为Servlet默认是只读的,也就是写不进去(文件上传不过来)所以要在文件服务器的 web.xml 对 Servlet 进行配置defaultServletorg.apache.catalina.servlets.DefaultServletdebug0readonlyfalselistingsfalse1defaultServlet/这里可…

confluence添加用户_玩转Confluence插件开发插件模块配置文件介绍(04)

上一章节我们介绍了测试模块的配置文件,这一章节我们介绍插件本身的配置文件,这个是我们部署插件真正用到的. 文件的位置位于项目主目录中的/src/main/resources目录中.插件配置文件介绍插件描述文件的根元素<atlassian-plugin key"${project.groupId}.${project.artif…

小博无线认证无法连接服务器,常见问题FAQ一、设备绑定-小博无线.PDF

常见问题FAQ一、设备绑定-小博无线.PDF常见问题 FAQ一、 设备绑定1、序列号如何查找&#xff1f;>路由器联网后 &#xff0c;管理界面首页左上角会有红色设备绑定按钮&#xff0c;点击按钮即可获取序列号&#xff0c;填到云平台完成绑定2、设置好后&#xff0c;还是不需要认…

log nginx 客户端请求大小_nginx log记录请求响应时间

有时为了方便分析接口性能等&#xff0c;需要记录请求的时长&#xff0c;通过修改nginx的日志格式可以做到&#xff0c;如添加一个新的log_formatlog_format timed_combined $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "…

nodejs复制服务器文件,nodejs文件夹深层复制功能

nodejs文件夹深层复制功能发布时间&#xff1a;2020-10-16 16:35:07来源&#xff1a;脚本之家阅读&#xff1a;116作者&#xff1a;java_Android前段时间接到领导要求&#xff0c;运营那边会时不时的给我一些.html文件&#xff0c;让我呢把里面的某些东西给解析出来插入到数据库…

画出降维后的图片_有没有人能画出《三体》里太阳系被二维化的概念图?

按照 小夫子老男孩 答案中视频的思路&#xff0c;我自己画了几幅星球降维的效果图。【manim】降维打击可视化_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com视频中把三维降至二维的思路&#xff0c;是先设计一个「二维降至一维」的方案&#xff0c;然后把三维中的两维…

慧停车安装后显示服务器异常,智能停车场系统常见故障以及排除方法

原标题&#xff1a;智能停车场系统常见故障以及排除方法随着停车问题日益增多&#xff0c;很多住宅小区都基本安装了智能化的停车场系统&#xff0c;智能停车场系统一般由入口控制机、出口控制机、智能道闸、地感线圈、余位显示屏、图象识别设备、系统软件、管理工作站等组成。…

ios 自定义拍照页面_vivo X27只靠颜值和拍照吃饭?体验过后你也会被系统所折服...

说到vivo X27&#xff0c;相信很多小伙伴都会第一时间想到其帅气的颜值以及强悍的拍照&#xff01;的确&#xff0c;就颜值来说&#xff0c;vivo X27凭借着升降式摄像头、零界全面屏、不凸出的后置三摄以及孔雀纹理的确称的上是2019年的最美旗舰&#xff1b;而拍照就更不用说了…

ipv4链路不通或服务器无响应,ping不通或丢包时如何进行链路测试?

Linux操作系统MTR介绍和使用安装MTR目前现有的Linux发行版本都预装了MTR&#xff0c;如果您的Linux云服务器没有安装MTR&#xff0c;则可以执行以下命令进行安装&#xff1a;CentOS 操作系统&#xff1a;yum install mtrUbuntu 操作系统&#xff1a;sudo apt-get install mtrMT…

consul 日志配置_Go语言微服务架构实战:第十一节 启动Consul

启动Consul安装配置好Consul以后&#xff0c;我们可以通过简单的命令启动consul。先来看最简单的启动方式&#xff1a;consul agent -dev在新终端中&#xff0c;执行如上操作。hongweiyulocalhost:~$ consul agent -dev > Starting Consul agent... > Consul agent runni…

vcm服务器如何修改端口,VCM2000是迈普协同通信解决方案的网管服务器.doc

VCM2000是迈普协同通信解决方案的网管服务器&#xff0c;提供友好的图形界面&#xff0c;功能强大、操作简单&#xff0c;能够对系统提供实时地配置、监控和管理。VCM2000采用采用组件化架构&#xff0c;同时集成网络管理和系统管理的优点&#xff0c;帮助用户实现网络运维从被…

chrome修改js数据怎么生效_chrome浏览器中 F12 功能的简单介绍

首先介绍Chrome开发者工具中&#xff0c;调试时使用最多的三个功能页面是&#xff1a;元素&#xff08;ELements&#xff09;、控制台&#xff08;Console&#xff09;、源代码&#xff08;Sources&#xff09;&#xff0c;此外还有网络&#xff08;Network&#xff09;等。元素…

python split函数 空格_Python随笔29:Python基础编程练习题23~24

注&#xff1a;本文所有代码均经过Python 3.7实际运行检验&#xff0c;保证其严谨性。Python编程Python基础练习题23&#xff1a;求三角形斜边上的高输入直角三角形两直角边a、b的值&#xff0c;输出斜边上的高&#xff0c;最后结果使用round(x, 2) 函数四舍五入保留2位小数。输…

docker run后台启动命令_Docker-第五部分:15个 Docker 命令

原文作者&#xff1a;Jeff Hale原文地址&#xff1a;https://towardsdatascience.com/15-docker-commands-you-should-know-970ea5203421翻译&#xff1a;付新圆在这篇文章中&#xff0c;我们将学习15个Dockers CLI命令。如果你还不了解Docker&#xff0c;请查看这个系列的其他…