大学生Django实训心得体会
不知不觉中,一个学期又要结束了。上学期结束时的日子仿佛历历在目,没想到又迎来了一个学期的结束。这个学期依旧学习了Django,让我继续加深了对Django这门课的认识。
实训让我觉得十分有意思,像打开了新的知识大门。Django结合了许多以前学过的知识,将他们运用在了一起,让我感觉十分有趣。在实训的过程中也经常遇到许许多多的小问题,有时候像“茬”一样到处看到底有哪里和老师的代码不一样,但结果却总是失败而归,可能这就是“当局者迷”吧。明明错误就在眼前,但却还是没有看出来,还是自己太过于粗心大意了。不过这也让我充分认识到了代码有时候少打了一个“/”或者“’”,又或者中英文状态没有转换都会导致代码运行不出来这一结果。所以督促自己要更加细心、严谨地对待代码。
Django是python的web开发框架,遵循MVC的设计模式,但在Django中通常称为MTV(model-template-views)。model是数据持久层,主要存放实体映射、实体关系以及实体的一些方法。template是表示层,主要是用来显示数据,Django的视图引擎可以将其渲染成HTML并显示。views是业务逻辑层,在Django中充当着链接model与template的桥梁,处理模型并向template提交数据,同时也接受template的请求和参数,完成相应的逻辑后提交模
型修改。
个人认为这里的MTV和.NET MVC表达的是同一个意思,最大的差别就是在里views是表示层,而Django里是业务逻辑层,根据官方文档的意思只是对views的理解不一样而已,其实完全可以当成controller来用。下面我将根据个人的一些理解来介绍一下Django的语法和特。
1. views和URL
views是业务逻辑层,在Django里面views通常是一个的views.py模块,放在对应的包里。views.py里面是具体的逻辑函数,每一个函数对应着一个或多个模版,为了建立模版与视图的联系,还要有一定的路由机制,于是Django通常在根目录有一个路由程序urls.py。路由由patterns来创建,用正则表达式来描述,极大地提高了路由机制的灵活性。
比如:
views.py
def home(request):
    values = request.META.items()
    values.sort()
django怎么学    return render_to_response('home.html',{"values":values})
urls.py
f.urls.defaults import *
    urlpatterns = patterns('',('^$',home),)
在这里request参数是必须的,但是你可以任意命名,只要符合规范即可,request包含页面的请求信息。sender_to_response在django.shortcuts里,所以你还要在前面声明form django.shortcuts import sender_to_response。request.MATE里含有所有的请求界面信息和用户信息。shor()是对list从小到大排序。返回值的意思就是向home.html模版提交一个values变量。urls中patterns中的元组添加了正则的导向规则:除去原地址匹配'^$'者导向home。当然这前提是views.py文件与urls.py在同一个文件夹里面否则就要引用home的命
名空间。如果想在url中传递多个值,可以在你想传递的匹配值上面加上括号比如('^([^/]+)/([^/]+) /$', home)就可以匹配/some/some/而some就会被传到处理函数home。相应的home要添加适当的参数来接受。
2. 模版(Template)
模版在Django中是显示数据的地方,通常为HTML格式,在模版中Django的处理逻辑要写在{% %}中,而要显示的变量要写在{{ }}中。Django的母板页可以用任何文档充当,前提是要用{% block name %}{% endblock %}声明要填充或替换的块,而使用时只需{% extends 母版名字 %}然后调用相应的块就可以了。
3. 模型
在setting.py 中的database的字典中配置数据库。配置完成后 使用manage.py startapp来创建app在models中编写python代码描述实体映射。比如:
models.py
class Publisher(models.Model):
    name = models.CharField(max_length = 30)
    website = models.URLField()
def __unicode__(self):
    return self.name
class Meta:
    ordering = ['name']
models包含在django.db中,里面封装了模型类的通用接口。CharField()是创建varchar型数据,参数有max_length,blank,verbose_name等。分别表示最大长度、是否为空、显示名称。def__unicode__提供了装箱后的默认显示,如果没有设置此函数,默认显示object类型。class Meta规定了模型的默认排序字段。同时Django也提供了外键设置接口,此处以book为例
class Book(models.Model):
    title = models.CharField(max_length = 100)
    authors = models.ManyToManyField(Author) #多对多关系
    publisher = models.ForeignKey(Publisher) #多对一关系
    publication_date = models.DateField(blank = True, null = True)
创建完成后要在setting.py配置文件INSTALL_APPS中加入app包的路径。
Django支持codefirst 可以用manage.py syncdb来同步数据库,更新数据库时Django是先生成sql语句然后再执行,在执行前可以运行manage.py validate来检查模型,也可以运行manage.py sqlall books。可以直接声明模型对象来实现数据的插入save()保存 objects.filter()查,可以对象调用delete()删除,同时也可以模型调用delete批量删除。同理update也是对象调用单个修改,模型调用批量修改。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。