Django初探

对于我来说,现在处于一个特殊的状态,就是知道哪些东西是需要的,相对重要的,但是我也很清楚的知道,这些东西是我目前不擅长的。所以为了能够落实自己的想法,同时逼迫自己学习一些原本陌生的东西,其实是一件很有意思的事情,前提是不能把自己逼得太紧,否则除了压力就是各种纰漏。

Python这些年火得厉害,web框架也是应运而生。Django算是其中比较典型的一个web框架,

Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 ,这个时间点上,国内的Java正是如火如荼的时候,web框架层出不穷,Python相对来说还算小众。没想到风水轮流转,没过多少年,就赶上了大数据的快车,数据分析里有Python的身影,devops近年来很火,自动化平台还是清一色的python框架,基本还是Django,所以说到Django,很多人并不陌生。

我花时间简单学习了下,发现和我的预期相符。原因在后面再解释下。

因为Python的跨平台,在windows下,linux都是兼容的,所以为了方便,我就直接在windows上做了测试。说几个坑。

一个是下载了安装包之后,Python版本是2.7的,如果是Linux自带的版本是2.6还是低了些。Python有两个大版本,2.7还有3.0的,虽然说是高低版本,但是竟然有很大的差别。所以在Django的版本上也会有一定的兼容落差。

比如我下载了Python2.7最新版本,Django相对较新的版本2.1,结果在安装Django的时候,就抛出了错误。 D:\django-master\django-master>python setup.py install Traceback (most recent call last): File "setup.py", line 5, in <module> ... File "D:\programs\python2.7\Lib\socket.py", line 47, in <module> import _socket ImportError: DLL load failed: 找不到指定的模块。

这个问题我看了很多资料,最后才反应过来,应该是版本的不兼容性。

所以我果断又下载了Python 3.6版本,然后再次尝试就没问题了。

所以一个基本的兼容列表图如下,可以避免走很多的弯路。

Django 版本

Python 版本

1.8

2.7, 3.2 , 3.3, 3.4, 3.5

1.9, 1.10

2.7, 3.4, 3.5

1.11

2.7, 3.4, 3.5, 3.6

2.0

3.5+

安装Django就是在下载的安装目录下,直接调用python setup.py install即可。

验证Django是否安装成功,也可以在python中引入这个库来测试是否正常。

>>> import django >>> django.get_version() '2.1' >>>

如果要创建一个项目,比如说testdj,可以使用统一的命令行django-admin来实现。

django-admin startproject testdj

如果需要启动服务,则是在项目目录下使用python来调用目录下的manage.py文件。

当然如果是作为测试环境,这么做没什么问题,如果是线上环境使用,就需要使用更专业的方式,比如使用服务器为nginx

如果是2.0版本以上的Django,启动后的欢迎界面是下面这样的。

较低的版本,稍微简单一些,其实对于我们的绝大多数应用来说,Python2.7还是使用范围较广,那么与之匹配的Django的版本也就保持在一个限定的版本范围内。

当然这个是一个完全空白的模板,什么内容都没有,我们可以来一个helloworld

在项目目录下,创建一个Python文件view.py,使用的是HttpResponse来返回数据。

from django.http import HttpResponse def hello(request): return HttpResponse("Hello world ! jeanron100 ")

而页面信息的扭转,则是使用urls.py完成。

from django.conf.urls import url from . import view urlpatterns = [ url(r'^$', view.hello), ]

也可以用在这个基础上做到数据与视图分离。数据是在html文件中,视图则是在view.py里面修改,两者的映射是通过模板文件来衔接的。

比如数据文件hello.html的内容如下,就是一个变量来代替。

<h1>{{ hello }}</h1>

而视图的信息修改view.py,内容如下,原本的HttpResponse就修改为了render.

from django.shortcuts import render def hello(request): context = {} context['hello'] = 'Hello World!' return render(request, 'hello.html', context)

这个hello.html文件如何映射,是通过一个指定的目录来衔接的,比如指定目录为templates,hello.html就放置在这个目录下。

需要修改原本的settings.py文件,把目录的部分修改一下,指定到templates目录。

TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR+"/templates",], # 修改位置

。。。。

修改后的值也是根据映射关系,比如hello这个变量它的值就位hello World!

如果要实现更为复杂的,就需要学习一下标签的内容,流程流转。整体而言和JSP的内容很相似,还需要结合html的很多知识。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:r14笔记第10天

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 多行数据的批处理之bulk collect(r3笔记第16天)

    在写pl/sql的时候,很多时候都会用比较经典的模式,定义一个游标cursor,然后循环从游标中取值进行处理。 类似下面的格式 declare cursor ...

    jeanron100
  • K-Means算法原理和简单测试

    今天学习了下K-Means算法,很多语言和工具都有成型的库和方法,不过为了能够督促自己理解,还是做了一些额外的工作,自己设想了一个例子,假设有10名员工,我...

    jeanron100
  • 性能调优之redo切换频率(47天)

    生产系统的一个库(负责容错处理的),目前遇到了严重的性能问题,数据量也大的出奇,一个分区表一百多个分区,blob字段达到了800多G.查看 AWR 系统负载倒不...

    jeanron100
  • 精度计算-乘法(大数乘大数)

    语法:mult(char a[],char b[],char s[]); 参数: a[]: 被乘数,用字符串表示,位数不限 b[]: 乘数,用字符串表示,位数不...

    用户1154259
  • JS魔法堂:获取当前脚本文件的绝对路径

    一、前言                           当写模块加载器时,获取当前脚本文件的绝对路径作为基础路径是必不可少的一步,下面我们一起来探讨一下这...

    ^_^肥仔John
  • 0820-CDSW在Session中运行代码超过一次就报错问题分析

    在CDSW中启动一个Session然后运行代码,第一次能够正常运行,在第一次运行完成后不关闭Session,在同一个Session中再次运行代码,此时就会出现报...

    Fayson
  • numpy C语言源代码调试(三)

    鉴于ddd过于简陋,希望找一个新一些的调试工具,看到有很多人推荐gdbgui,这是一个非常新的调试工具,前端使用浏览器,现在采用这一架构的软件越来越多,可以完全...

    py3study
  • 微软研究院Jianfeng Gao:基于深度学习的自然语言处理导论(课程,附PPT下载链接)

    【导读】深度学习近几年在各领域的发展可谓是如火如荼,基于深度学习的自然语言处理方法也大受关注。本文介绍微软研究院Jianfeng Gao的一个暑期课程,课程主要...

    WZEARW
  • Web渗透之文件上传漏洞总结

    文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户...

    HACK学习
  • 含有echart 图表的报表打印 原

    最近需要打印含有echart图表的报表,采用jqprint插件打印,直接用jqprint打印echart的图不显示,这里需要借助img 来实现

    tianyawhl

扫码关注云+社区

领取腾讯云代金券