python--django1

django学习

环境搭建

学习用django 创建 python 的web项目。 首先搭建 django 环境。  django 是基于 python写的。所以 首先 待有 python 的运行环境。 这个没啥好说的。 之后 就是 下载 安装django 我是 在eclipse上面开发的。 所以 还需要下载 eclipse 的插件。 全部安装好了。 就可以建立 django的环境了。 过程很简单。网上资料很多。 都是很简单的安装。 我是 window的环境。 django也是用命令安装的。

然后就开始 建立我们的项目了。

新建一个django项目 在填写数据库的时候 注意 如果选 像 oracle的数据库的时候。 可能报错 需要客户端插件。 orcle只要把一个文件拖过去就ok了。不需要 下载很大的客户端。

目录解析

建立好了之后 目录如下:

__init__.py 这个是 python 包生成的文件。有了这个文件 的文件夹 才是 python的包。

settings.py 这个是 设置文件 项目的设置都在里面。 我现在刚学 可能 主要只是 数据库的设置。在第一个就是.

urls.py 这个 作为新学着 可能是最重要的。这个 就是控制着url的转发。 根据这个url 调用不同的方法。

刚接触这里 出了好多问题

关于url转发

文件 刚创建 是这样:

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'MyFirstDgango.views.home', name='home'),
    # url(r'^MyFirstDgango/', include('MyFirstDgango.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)
所有的值 保存在 urlpatterns里面

第一个参数 是 视图函数的通用前缀。很多类似的配置文件里面都有这个的。 我用 spring mvc+freemarker的社时候 spring 的配置文件里面也有 。简单的说 就是 映射函数都到这个下面去找。

第二参数是 url的正则表达式。

第三个参数就是 映射的函数了。

参数既可以是 字符串 也可以是对象。在这里 我吃了好多亏。

对于 xx.xx这样的路径 是可以解析的到 但是 对于 xx.xx.xx三层 就解析不到了。但是对于字符串 没有这种限制 可以很多层。

 更好的做法是 用 include 来处理。这样就可以 导入其他包里面的url文件。

 url(r'^MyFirstDgango/', include('MyFirstDgango.foo.urls'))

这样表示 MyFirstDgango的路由 会转到 'MyFirstDgango.foo.urls' 里面定义的映射去。

对于参数 在url 映射里面 用括号 括起来 就是参数 比如

url(r'^MyFirstDgango/(xxxx)', include('MyFirstDgango.foo.urls')),

方法接受 在后面 添加参数 就ok了。 当然 那个参数 可以用正则来表达。

一个 简单的例子 

urls.py

urlpatterns = patterns('MyFirstDgango',
                          url(r'^xxxxx/(11)/$',  'test.myView.current_datetime'),
                           url(r'^xxxxxx/$',  myView.current_datetime),
                        #url(r'^yyyy/$',  myView.current_datetime),
    # Examples:
    # url(r'^$', 'MyFirstDgango.views.home', name='home'),
    # url(r'^MyFirstDgango/', include('MyFirstDgango.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)


test.myView.py

from django.http import HttpResponse
import datetime
def current_datetime(request,offset):
    now = datetime.datetime.now()
    html = "<html><body>dddIt is now %s.  %s</body></html>" % (now , offset)
    return HttpResponse(html)
访问 地址:http://127.0.0.1:8000/xxxxx/11/

关于页面显示

当然 上面  整个 html 是后台 组装起来 返回的。 有点回到刚接触软件 写java sevrlet的时候了。

djingo当然有自己的东西来处理界面。累死jsp,freemarker什么的。

在djingo里面 使用模板系统

首先 在  django.template.base包里面 有个Template。这个是 模板的核心class。用来解析模板代码。

模板代码就是累死jsp那样的文件。 html 里面混杂着一些 逻辑代码。 通过{}来抱起来。

用两个大括号括起来的文字(例如 {{ person_name }} )是 变量(variable) 。这意味着将按照给定的名字插入变量的值。如何指定变量的值呢?稍后就会说明。
被大括号和百分号包围的文本(例如 {% if ordered_warranty %} )是 模板标签(template tag) 。标签(tag)定义比较明确,即:仅通知模板系统完成某些工作的标签。

而数据 是通过一个 Context类来保存的。

from django.template.base import Template
from django.template.context import Context

t = Template("My name is {{ name }}.")
c=Context({'name':'xxxx'});
print(t.render(c))

一个简单的例子。告诉我们 template 和 context 是怎么工作的。

跟我之前接触的一些模板技术有点区别的是,在数据中存的对象的方法 可以直接用‘.’调用。即使是自己自定义的对象。对于变量为空等情况 也不会报错。

'''
Created on 2013-10-29

@author: Administrator
'''

class test3(object):
    '''
    classdocs
    '''
    def __init__(self):
        '''
        Constructor
        '''
    def test(self):
        return "11"
        

from MyFirstDgango.test.test3 import test3
from django.template.base import Template
from django.template.context import Context


t = Template("My name is {{ aa.test }}.")
aa=test3();
print(aa.test)
c=Context({'aa':aa});
print(t.render(c))

当然 这只支持不带参数的方法。而且 会有可能导致混乱。 我们可以在定义方法的时候 设置 alters_data = True来让模板系统不会执行任何以该方式进行标记的方法。


内建模板标签及过滤器

下面 记录一下 常用的标签。 其实 语法没什么 ,任何模板都是这样。主要几记录一下 写法。帮助了解

if/else  

{% if today_is_weekend %}
<p>Welcome to the weekend!</p>
{% endif %}

{% if today_is_weekend %}
<p>Welcome to the weekend!</p>
{% else %}
<p>Get back to work.</p>
{% endif %}

对于 其他 的 语言的 ‘与’,‘ 或’ ,‘非’ 用 ‘&&’,‘| |’,‘!’ djingo模板里面是用 and 和 or和 not。 需要注意 一个 标签里面 不可以混用。 只能用一种。防止逻辑混乱系统不支持用圆括号来组合比较操作。如果你发现需要组合操作,你可以考虑用逻辑语句来简化 模板的处理。

for

<ul>
{% for athlete in athlete_list reversed%}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
reversed 是反向迭代。 可选。 

Django不支持退出循环操作。如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代的项目。同
理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部。

{% for %} 标签在循环中设置了一个特殊的 forloop 模板变量。这个变量能提供一些当前循环进展的信息:

forloop.counter

总是一个表示当前循环执行次数的 计数器。 从一开始。 每次循环开始 都设置成1。

forloop.counter0 

同上 不过 是从0开始的计数器

forloop.revcounter 

循环剩余量。 就是 循环开始 这个值是 项目总数。 最后一次执行中 这个数为1.

forloop.revcounter0

同上 不过开始的值是 总数-1,最后一次执行这个数为0.

forloop.first

 boolean值 是否第一次执行。 感觉 改成 isfirst 跟好啊。

forloop.last

是否最后一个

forloop.parentloop

嵌套循环的时候 指向上次循环的forloop对象


 ifequal/ifnotequal

{% ifequal section 'sitenews' %}
<h1>Site News</h1>
{% else %}
<h1>No News Here</h1>
{% endifequal %}

只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数。

Django模板系统压根儿就没想过实现一个全功能的编程语言,所以它不允许我们在模板中执行Python的语句。它的思想 就是模板里面不要有太多逻辑。

还有一些其他的东西

注释

{# This is a comment #}

注释不能多行

过滤器

{{ name|lower }}
这个 就想freemarker的内建函数。就是 显示的是 调用了后面过滤器之后的输出结果。

一些比较重要的的过滤器

addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。 这在处理包含JavaScript的文
本时是非常有用的。
date : 按指定的格式字符串参数格式化 date 或者 datetime 对象, 范例:
{{ pub_date|date:"F j, Y" }

escape : 转义 &符号,引号,<,> 符号。 这在确保用户提交的数据是有效的XML或XHTML时是
非常有用的。 

length : 返回变量的长度。你可以对列表或者字符串,或者任何知道怎么测定长度的Python 对象
使用这个方法(也就是说,有 __len__() 方法的对象)。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值