Django学习笔记(2)

Django官方文档里有一个投票Web应用的例子。建立好的目录如下:

mysite是project的名字,polls是这个应用。

.
├── db.sqlite3
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
└── polls
    ├── admin.py
    ├── admin.pyc
    ├── __init__.py
    ├── __init__.pyc
    ├── migrations
    │   ├── 0001_initial.py
    │   ├── 0001_initial.pyc
    │   ├── __init__.py
    │   └── __init__.pyc
    ├── models.py
    ├── models.pyc
    ├── tests.py
    ├── views.py
    └── views.pyc

接下来梳理一下这个应用的数据库和实现。

##表结构

在Sqlite3中建立两个表,polls_poll是投票信息表。

sqlite> select * from polls_poll;
id | question | pub_date
3|what is your name|2015-09-02 13:42:25
4|What kind of book do you like?|2015-09-05 08:59:00

polls_choice是每个投票对应的选项表。

sqlite> select * from polls_choice;
id | choice_text | votes | poll_id
3|Xiao Ming|100|3
4|Xiao Hong|120|3
5|Xiao Hua|130|3
6|Xiao yi|200|3
7|Literature|111|4
8|History|234|4
9|Computer Science|98|4

polls_choice中的poll_id字段对应于polls_pollid。这里是一个ForeignKey,主要作用是将两个表进行关联和约束。详情参加SQL FOREIGN KEY 约束

models.py

from django.db import models
import datetime
from django.utils import timezone


class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('data published')

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

model主要定义了PollChoice两个class,对应到DB中就是polls_poll表和polls_choice表,而question,pub_date这些变量名就是DB中的字段名,这就是ORM。详情参见为什么很多人都喜欢Django的ORM而不是SQLAlchemy?

admin.py

from django.contrib import admin
from .models import Poll, Choice

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3

class PollAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question']}),
        ('Date Information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]

    list_display = ('question', 'pub_date', 'was_published_recently')
    list_filter = ['pub_date']
    search_fields = ['question']
    inlines = [ChoiceInline]

admin.site.register(Poll, PollAdmin)

这个文件用来控制web显示的样式和功能。

fieldsets控制显示的内容

1a

list_display控制列表title。

list_filter控制筛选条件,相当于直接生成了Mysql的WHERE...AND...AND语句。

search_fields控制搜索框,相当于直接生成了Mysql的WHERE...LIKE '%text%'语句。

从这里可以看到Django是相当省时省力。

2a

参考

https://docs.djangoproject.com/en/1.7/intro/tutorial02/

http://www.w3school.com.cn/sql/sql_foreignkey.asp

http://www.zhihu.com/question/19959765

转载于:https://my.oschina.net/lvyi/blog/501370

学习Django时,使用PyCharm作为开发工具可以提高效率。PyCharm是一款功能强大的Python集成开发环境,它提供了丰富的功能和工具,可以帮助开发者更好地编写和调试Django应用程序。 在学习Django的过程,可以使用PyCharm创建Django项目,并使用其内置的Django支持功能来简化开发过程。PyCharm可以自动识别Django项目的结构,并提供代码补全、语法检查、调试等功能,帮助开发者更快地编写和调试代码。 此外,PyCharm还提供了集成的版本控制系统,如Git,可以方便地管理和追踪代码的变化。它还支持自动化测试和部署,可以帮助开发者更好地进行项目管理和发布。 总之,使用PyCharm作为开发工具可以提高Django学习的效率和便利性。它的强大功能和友好的用户界面使得开发者可以更专注于代码的编写和项目的开发。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *3* [PyCharm平台下初学Django框架](https://blog.csdn.net/howard2005/article/details/93491364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pycharm平台下的Django教程](https://blog.csdn.net/Sunshine_ZCC/article/details/73918408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值