===================
== 颢阳's Blog ==
===================
blog for everything

Django浅谈

Posted on in tech • 1351 words • 3 minute read
Tags: Django

Django为何物

Django是在网页开发中比较常用的一个框架,主要帮助搭建一个类似MVC的workflow. 免去了很多繁琐的网页界面交互的问题,作者还特别在官网上写

The web framework for perfectionists with deadlines.

意思就是为追求完美却又被迫在deadline之前完成所准备的一个工具。

环境搭建

作为anaconda的忠实粉丝,在Linux的操作环境中我还是在此安利一波。还记得去年用scrapy写爬虫的时候为了安装依赖走了很多弯路,由于当时使用的是homebrew,brew里面并没有srcapy,于是又研究了好半天设置环境变量等遇到的种种问题,最终还是放弃了决定安装ubuntu才搞定。后来很偶然的在微信上看到了anaconda才发现自己好蠢……

所以安装anaconda是为了在自己喜欢的python环境中进行开发,本文讲的内容也都是在python3的环境下开发。 首先选择要使用的python环境,如果是anaconda启用的方法是:

$ source activate 'your-env-name'

然后使用pip安装django(目前最新版本是1.11.2):

$ pip install Django==1.11.2

检查安装:

>>> import django
>>> print(django.get_version())
1.11

我比较喜欢的IDE是Jetbrain的PyCharm CE,个人认为CE已经完全满足我的需要了。

然后就可以cd到自己的目录下开始创建django web app了!

使用

在自己的目录下使用指令:

$ django-admin startproject mysite

之后会创建一个叫mysite的文件夹,里面的东西长这样:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

最有用的manage.py可以帮助你在command line中开启服务器,进入对应的python shell去测试生产的models的状况。

  • 启动server:
$ ./manage.py server

这样默认在127.0.0.1的8000端口开启,如果想再别的地方:xxx.xxx.xxx.xxx:xxxx

  • 启动shell:
$ ./manage.py shell

在使用自建的model时候不要忘记import:

>>> from appName.models import YourModel1, YourModel2

官网上给了一个制作投票软件的非常详细的教程,在此不多赘述。

小tips

  • 在设计models的时候一定要考虑每类数据之间的关系: 在Django中有三种数据间关系:Many-to-many, Many-to-one, one-to-one, 具体参见官方的documentation

  • 充分利用Django的URL conf: Django是可以帮助自定义url pattern的,例如:

url(
       r'^$',
       views.homepage,
       name='homepage'
   ),

便是类似"127.0.0.1:8000/"

url(
       r'^(?P<voteresult_id>[0-9]+)/$',
       views.vote,
       name='vote'
   )

便是类似"127.0.0.1:8000/123"

因此在使用GET request的时候会方便很多,不过要注意用户输入的内容如果在GET中要显示的话文本要在html中用js二次处理才可以,避免出现类似“/ \”等会混淆的字符串。

  • 处理HttpResponse多用render: 这个就很直接了,为啥人家给了shortcut不用呢,使用render的时候不管是通过ajax生成的还是普通的post或者get都可以正确的反馈,节省了很多的时间。(不过前提要写好ajax😄)

  • 防止用户刷新界面: 这个小tip是针对在设计前端时的一个问题,我处理的方式是在进入链接之后即刻跳转到稳定界面,只要在HTML中添加

window.location.href = "/result/{{vote_item.id}}";

类似这样的强制跳转就可以了,这也是目前我认为最简单的处理方式,当然你也可以用python的session来通过cache来判断,但是会很麻烦。

以后这里还会不定期的添加小tips

comments powered by Disqus