1. 框架基础学习
首先跟着这篇文章学习,懂得了如何打印 hello world!
文章地址:http://python.jobbole.com/87444/
2. 项目实践
2.1 项目描述
然后动手做了个Todo list 的小项目,源码地址:https://github.com/TsingXu430/django-todo-demo
欢迎 star...
数据存储和部署都在 leancloud 上,很方便。
参考了leancloud上的开源项目:Flask Todo Demo
github地址:https://github.com/leancloud/flask-todo-demo
2.2 实践步骤:
- 先通过Django搭建一个project,在setting.py中增加 leancloud 的app_id,app_key等参数。
- 在根目录下新建views文件夹,新增todo.py,此为主要代码文件
- 在templates文件夹下新建todo.html文件,编写前端代码
- 在static文件夹下引入页面需要的 js,css, font, 图片
- 一切准备好后,编写 urls.py,增加第一个路由:
url('^$', todo.show)
这句的意思是将首页路由指向todo.py中show方法 - 编写show方法, 因为需要查询 leancloud 云存储,所以要引入相关库
import leancloud
from leancloud import Object, Query, LeancloudError
from settings import LC_APP_ID, LC_APP_KEY
#定义Todo实例对象,可以理解为数据表
class Todo(Object):
pass
#leancloud 初始化,传入app_id,app_key
Leancloud.init(LC_APP_ID, LC_APP_KEY)
#一个 * 号代表list或者tuple,** 代表map或者dic(字典)
def show(request,**status):
status = int(status.get('status', 0))
try:
todos = Query(Todo).add_descending('createdAt').equal_to('status', status).find()
except LeanCloudError as e:
todos = []
print(e.error)
todos_list = []
# leancloud query的结果是一个list,所以需要转换成dict
for todo in todos:
todo_list = {}
todo_list['id'] = todo.get('objectId')
todo_list['content'] = todo.get('content')
todo_list['createAt'] = todo.get('createdAt')
todos_list.append(todo_list)
context = {'status': status, 'todos': todos_list}
#最终使用Django框架的render来渲染模板,传入参数为context
return render(request, 'todos.html', context)
数据在 leancloud 存储不需要新建数据表,直接调用实例对象就可以,所以很方便。
其中 **status
是因为这个参数不是必须的,而且是字典dict类型。
- 编写 todo.html 模板
{% if status == 0 %}
<ul class="list-group">
{% for todo in todos %}
<li class="list-group-item">
<form class="pull-right" action="{% url 'delete' todo.id 0 %}" method="post" id=delete-{{todo.id}}>
{% csrf_token %}
<span class="glyphicon glyphicon-trash todo-delete"></span>
</form>
<form action="{% url 'done' todo.id 0 %}" method="post" id="done-{{todo.id}}">
{% csrf_token %}
<span class="glyphicon glyphicon-unchecked"></span> {{ todo.content }}
</form>
</li>
{% endfor %}
</ul>
{% elif status == 1 %}
<ul class="list-group">
{% for todo in todos %}
<li class="list-group-item">
<form class="pull-right" action="{% url 'delete' todo.id 1 %}" method="post" id=delete-{{todo.id}}>
{% csrf_token %}
<span class="glyphicon glyphicon-trash todo-delete"></span>
</form>
<form action="{% url 'undone' todo.id 1 %}" method="post" id="undone-{{todo.id}}">
{% csrf_token %}
<span class="glyphicon glyphicon-check text-muted"></span> <del class="text-muted">{{ todo.content }}</del>
</form>
</li>
{% endfor %}
</ul>
{% endif %}
django会检测csrf攻击,所以在from表单中添加了 csrf_token,防止报错。
后面就是慢慢编写 delete, todo, untodo 这些方法。
- 提交到git后,发现github给这个项目标记的是html。原来需要添加配置
.gitattributes
文件:
*.js linguist-language=python
*.cdd linguist-language=python
*.html linguist-language=python
到此,入门项目已经完成,接下去打算爬一些个人觉得有意思的数据做个web服务。