[项目实训]SDUOJ的结构分析和Django进一步学习

来源:互联网 发布:域名 daddy 编辑:程序博客网 时间:2024/06/07 03:29

这几天在进一步学习Django框架的过程中,同时分析了一下我们SDUVJ的基础——SDUOJ的代码结构


可以看到SDUOJ中含有一个APP,OJ,同时SDUOJ相关的设置文件等保存在OnlineJudge中。

models.py文件中,我们可以看到OnlineJudge的数据库设计,而在settings.py之中保存了连接数据库的相关设置。

urls.py中保存了相关url的设置,负责网站的页面跳转

views.py主要负责将前端所需要的数据从数据库中提取出来以及将前端所需要保存的数据保存到数据库中,相当于一个中间件,而这个也是网站的主要部分,负责处理各种用户请求


下面接着记录一下Django最近几天的学习


首先Django URL name一些细节的理解

例如这句代码url(r'^add/$', calc_views.add, name='add'), 这里的 name='add' 是用来干什么的呢?

简单说,name 可以用于在 templates, models, views ……中得到对应的网址,相当于“给网址取了个名字”,只要这个名字不变,网址变了也能通过名字获取到。

同时学到了不能写“死网址”。如果这样写“死网址”,会使得在改了网址(正则)后,模板(template),视图(views.py,用以用于跳转),模型(models.py,可以用用于获取对象对应的地址)用了此网址的,都得进行相应的更改,修改的代价很大,一不小心,有的地方没改过来,就不能用了


另外了解了Django的模板系统,Django 的模板系统会自动找到app下面的templates文件夹中的模板文件。

同时想到网站模板的设计,

网站模板的设计,一般的,我们做网站有一些通用的部分,比如 导航,底部,访问统计代码等等

nav.html, bottom.html, tongji.html

可以写一个 base.html 来包含这些通用文件(include)


<!DOCTYPE html><html><head>    <title>{% block title %}默认标题{% endblock %} </title></head><body> {% include 'nav.html' %} {% block content %}<div>这里是默认内容,所有继承自这个模板的,如果不覆盖就显示这里的默认内容。</div>{% endblock %} {% include 'bottom.html' %} {% include 'tongji.html' %} </body></html>

Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。这样设计有利当然也有弊,有利是的地方是一个app可以用另一个app的模板文件,弊是有可能会找错了。所以我们使用的时候在 templates 中建立一个 app 同名的文件夹,这样就好了。

这就需要把每个app中的 templates 文件夹中再建一个 app 的名称,仅和该app相关的模板放在 app/templates/app/ 目录下面,