`
yzjklove
  • 浏览: 63759 次
  • 性别: Icon_minigender_1
  • 来自: 广东省惠州市
社区版块
存档分类
最新评论

使用django的总结

阅读更多
为大漫使用django进行开发已经有几个月了,总算没白白浪费时间,经过断断续续的开发,终于发布了内部1.0的版本,可以在线看漫画。
现在总结一下其中关于django的实践,里面提到的技术点很片面不是很全,但对于大漫的项目来说是刚刚好。如果觉得哪里不是很清楚请自行google找资料学习,这里也没有对django的基础进行说明。有问题可以给我留言
1)添加模块
url.py中配置/comic下的请求都转到comic模块进行处理。
需要在comic模块中添加一个url.py文件,添加如下语句到项目的url.py中
(r'^comic/',  include('bigcomic.comic.urls')),
2)在django中对静态文件的配置
(r'^media/(?P.*)$', 'django.views.static.serve',
        {'document_root': settings.STATIC_PATH}),
    (r'^comicviewer/(?P.*)$', 'django.views.static.serve',
        {'document_root': settings.FLEX_PATH}),
在settings中添加相应的路径配置,如下
BIGCOMIC_ROOT = os.path.dirname(__file__)
STATIC_PATH = os.path.join(BIGCOMIC_ROOT, 'media')
FLEX_PATH = os.path.join(BIGCOMIC_ROOT, 'comicviewer')
3)乱码问题
在django的settings.py文件中添加
DEFAULT_CHARSET = 'utf8'
py文件中要在文件第一行加入如下内容
#-*-coding:utf-8-*-
数据库编码要设置成utf-8
4)看下model的配置
首先model要继承models.Model
class Book(models.Model):
大漫所用到的字段类型
enname = models.CharField(unique=True,max_length=100,null=True,blank=True)
字符串类型,数据是唯一的,最大长度为100,可以为null,前台form不验证
category_id = models.IntegerField(default=1)
数字类型,默认值为1
createTime = models.DateTimeField(auto_now_add=True)
时间类型,第一次创建为当前时间,之后不会变动
updateTime = models.DateTimeField(auto_now=True)
时间类型,自动添加时间,第一次为当前时间,每次数据有变动都会更新
comicInfo = models.TextField(null=True,blank=True)
数据库text类型,可以为null,前台form表单不验证
comic = models.ForeignKey(Book)
多对一,一对多的关联。如果book模型没有定义,则使用"Book"的字符串来代替
acg = models.OneToOneField(Acg,primary_key=True)
一对一关联,并设置这个id为主键,防止主键变成自增长
5)meta中对model的排序,以及表名的映射
class Meta:
        ordering = ['-browseCount','-updateTime']
class Meta:
        ordering = ['-updateTime']
在一个model类中编写class meta则定义具体的排序规则,"-"为倒叙排列
6)关于json
django中内置了simplejson的组件,按如下引用
from django.utils import simplejson
使用方法为:return HttpResponse(simplejson.dumps(data))
但simplejson有个问题就是只支持基本的数据类型,对与自定义的model类型他并不能按照我们想要的
格式进行转换,所以需要我们单独进行扩展。参考了官方网站的方法但觉得很不好用,所以只好自己在
定义的model中加入json方法,来解决这个问题,使用如下
def json(self):
在model类中自定义一个json的方法,此方法返回由类变量组装成的一个字典。
在产生json格式的时候通过对象的json方法来获得这个对象的转换方式,如下
[book.json() for book in hotList]
7)取得10条数据并按要求排序
hotList = Book.objects.order_by('-browseCount')[:10]
8)接受request的数据
从post中取得数据,如果不存在则默认值为1
pageNumber = request.POST.get('pageNumber',1)
从get中取得数据,如果不存在则默认值为1
pageNumber = request.GET.get('pageNumber',1)
从所有请求中取得数据,如果不存在则默认值为1
pageNumber = request.REQUEST.get('pageNumber',1)
判断一个请求是post还是get方式
if request.method == 'GET':
对于request的操作可以参考
http://www.woodpecker.org.cn/obp/django/django-faq/request_response.html
9)分页功能
首先从request中得到页号pageNumber,然后取得要分页的数据,这里的数据是取得所有数据
book_list = Book.objects.all()
使用分页对象对数据进行分页,设置每页的页大小
paginator = Paginator(book_list,settings.BIGCOMIC_PAGESIZE)
然后传入取得的页号,来取出这页的数据
contacts = paginator.page(pageNumber)
如果没有数据会出现EmptyPage异常,所以这里需要捕获这个异常并进行处理
10)模板中的分页功能使用
首先是后台view中对数据进行分页,然后将分页所得的数据传到模板中,通过模板进行数据页号,上一页下一页的显示
return render_to_response('comic/list.html',{'contacts':contacts})
模板中代码如下
{% if contacts.has_previous %}
            previous
        {% endif %}
        {% for p in contacts.paginator.page_range %}
          {{p}}
      {% endfor %}   
         共有{{ contacts.paginator.num_pages }}页
        {% if contacts.has_next %}
            next
        {% endif %}
11)进行条件搜索
使用Q对象可以进行搜索条件的组装
q = Q(acg__name__icontains=searchContent) | Q(author__icontains=searchContent) |Q (keyword__icontains=searchContent)
对comic_book表的author字段和keyword字段以及与其有一对一关联的acg表的name字段进行ilike查找,这里ilike与like的区别为不区分大小写,3相之间为“或”的关系
book_list = Book.objects.filter(q)
根据组装的语句在数据中进行查找,这里如果没有找到任何数据则会扔出ObjectDoesNotExist异常
12)对数据进行添加操作
先根据request中传进来的id取得一个数据库中的相应数据
book = Book.objects.get(pk=book_id)
这里如果数据不存在则扔出ObjectDoesNotExist异常
然后可以对这个数据对象进行改动,最后通过save方法进行数据保存
book.save()
13)读取指定目录的文件列表
有个功能会从指定目录读取所有图片的文件名列表并对这个列表中的文件名进行拼装成URL返回这个列表
imageUrl = [ viewurl + list for list in os.listdir(localdir)]
imageUrl.sort()
其中viewurl为域名,localdir为本地的一个目录,如/home/www
sort()为排序,python中的列表排序并不会返回任何东西
14)在url中传递参数
url.py中如下配置
(r'detail/(\d*)/page/(\d*)/$', 'bigcomic.comic.views.detail'),
则访问时,在请求的url中detail后跟一个漫画的ID,page后跟具体要请求的页号。例子如下
http://www.baidu.com/comic/detail/5/page/2
参数怎样传递到view的方法中呢,则view中的方法如下,在request后多加两个参数就可以获得url中的数据
def detail(request, comicID, pageNumber):
15)方法的事物控制
需要在settings.py中添加事物的中间件,如下
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
)
然后在方法名上加入事物的配置
@transaction.commit_on_success
def create(request):
这里顺带说一下CommonMiddleware这个中间件的功能是帮你补全url中的/,使得你在输入url的时候不用去补最后的/
16)模板目录的配置
在settings.py中对模板目录进行如下配置
TEMPLATE_DIRS = (
    os.path.join(BIGCOMIC_ROOT,'templates'),)
分享到:
评论

相关推荐

    django 学习资源总结

    django 学习资源总结,里面包括了个人的总结

    django ORM机制的总结

    Django ORM机制的总结 Django ORM(Object-Relational Mapping,对象关系映射)机制是Django框架中的一种强大功能,它允许开发者使用Python代码来操作数据库,实现了对象和关系数据库之间的映射。下面是Django ORM...

    Python中django学习心得

    ### Python中Django学习心得详解 #### 一、概述 本文档主要介绍Python中的Django Web应用框架的一些关键概念和技巧。Django是一款基于Python语言的开源...希望本文能够帮助你在使用Django进行Web开发时更加得心应手。

    Python Web 框架,第 1 部分 使用 Django 和 Python 开发 Web 站点.doc

    文档内容虽然包含了一些无法解析的[pic]标记,但核心信息仍然清晰,重点讲解了Django框架的安装与基本使用。 ### Django框架简介 Django是基于Python编程语言的一种开源Web框架,遵循MVC(Model-View-Controller)...

    django项目使用dwebsocket案例

    总结,通过这个案例,我们学习了如何在Django项目中集成dwebsocket库,实现了服务器向前端的实时数据推送。这个功能对于实时聊天应用、股票交易系统、在线游戏等场景都非常有用。继续深入研究,你可以实现更复杂的...

    Django 安装使用基础

    ### Django 安装使用基础 #### 一、安装Django Django 是一款用 Python 编写的开源 Web 开发框架,它遵循 MVC(Model-View-Controller)设计模式。Django 的安装非常简单,可以通过 pip 工具快速完成。 1. **安装...

    基于Django框架的美食博客

    总结起来,"基于Django框架的美食博客"是一个集成了用户管理、内容发布、互动交流等多样功能的Web应用。它利用Django的强大功能,实现了高效、安全的后端逻辑,并通过定制化的前端设计,为用户提供了一个美观且易用...

    Django读取Mysql数据并显示在前端的实例

    总结一下,这个实例展示了如何在Django中连接MySQL数据库,创建模型,同步数据库,定义视图,设置URL路由,以及在模板中显示数据。这个过程是Django进行数据驱动开发的基础,可以帮助你构建复杂的数据展示和交互功能...

    django 总结资料

    ### Django全面总结资料 #### 一、服务管理 在Django框架中,通过`manage.py`脚本可以方便地管理整个应用。以下是一些常用的服务管理命令及其功能介绍: 1. **基本命令**: - `python manage.py help`:显示帮助...

    django总结.txt

    ### Django 模型定义 在 Django 中,模型是数据库表的抽象表示。模型由多个字段组成,每个字段代表数据库表中的一个列。例如,以下代码展示了如何定义一个名为 `Student` 的模型类: ```python class Student...

    android运行django例子

    由于Django支持Python 2.7(尽管官方已不再维护),我们可以考虑使用像是SL4A (Scripting Layer for Android) 或 Kivy的Python-for-Android这样的项目,它们可以在Android设备上运行Python 2.7代码。SL4A提供了...

    Practical django Projects 实战Django

    本文档旨在通过一个实际的项目案例来帮助读者深入理解Django框架的核心概念,并掌握如何使用Django进行高效的Web应用开发。本篇内容基于豆丁网提供的《Practical django Projects 实战Django》资源进行整理与扩展。 ...

    django开发完美博客

    总结来说,"django开发完美博客"项目展示了如何利用Django框架搭建一个功能完善的博客系统,涵盖了从数据模型设计、视图逻辑实现、模板渲染、URL路由到用户认证等多个关键方面。通过学习这个项目,开发者不仅可以...

    python Django web 实训项目的实验报告

    总结来说,本实训项目不仅涵盖了Django的基础使用,还涉及到Web开发中的常见问题和解决方案,如数据安全、页面交互、数据可视化和性能优化,为开发者提供了全面的实践平台。通过这样的项目,学生能够提升自己的...

    DJango总结,各个小功能的实现

    水水水水水

    django中文开发手册

    ### Django中文开发手册知识点概述 #### 一、Django简介(第一章) ...以上是对《Django中文开发手册》的主要内容进行了概括性的总结,旨在帮助读者更好地理解和掌握Django框架的相关知识和技术要点。

Global site tag (gtag.js) - Google Analytics