Django学习--Writing your first Django app(3)
接着上一部分,在这个部分主要是添加网页相关的一些内容.
对应的源码也放在了github仓库中mysite-part3
开始
概述
在我们的polls的应用中,我们需要以下的四个视图:
- Question的index页面—显示最近的问题
- Question的detail页面—显示一个问题的详细信息,可以投票
- Question的results页面—显示一个问题的结果
- 投票功能—能够处理投票信息
接着上一部分,在这个部分主要是添加网页相关的一些内容.
对应的源码也放在了github仓库中mysite-part3
在我们的polls的应用中,我们需要以下的四个视图:
这是Writing your first Django app, part 2
接着第一部分的例子继续,在这个部分我们要设置数据库,创建第一个模型并且快速介绍一下django的自动生成的admin管理页面.
自己写的代码也同步在github的仓库里:mysite-part2
$ python manage.py migrate
1 | Operations to perform: |
在这个简单的app里,需要创建2个模型,Question和Choice.Question里包含了问题和提问的时间,Choice里包含了选择的文字和投票的信息.
在polls/models.py文件里添加如下的信息:
1 | from django.db import models |
对应每一个class都会在数据库中生成对应的表和字段.而在对字段添加属性和限制的时候,使用的是Field类.对于Field的详细信息不做过多的描述.
首先需要在settings.py文件里将app导入项目中,在INSTALLED_APPS属性中添加polls.apps.PollsConfig路径即可,如下:
1 | INSTALLED_APPS = [ |
接下来就可以在命令行中输入:$ python manage.py makemigrations polls
当看到如下的信息的时候,就表示正确运行了.
1 | for 'polls': |
接下来就可以在代码中对这2个对象进行操作了,在官方的文档中还介绍了如何在shell中来对数据库进行操作,这里就不写出来了,需要的话在官网可以看到.
在模型中添加__str__() 很重要,这样就不会在读取对象的时候只看到对象的class名了.
1 | from django.db import models |
至此,对于简单的数据库模型的操作就可以进行了,在代码中直接使用如:**Question.objects.all()来查询所有的对象,用save()**函数就可以向数据库中插入对象,Django推荐在查询的时候使用filter来进行限定条件的查询,比如:
1 | Question.objects.filter(id=1) |
注:__startswith这类的方法是更高级的查询限制的方法,详细的可以查看官方的文档,这里的意思很明显就是,查询question_text字段中以what开头的信息.
这也算是我非常喜欢的一个Django的特性了,对后台管理的操作可以直接使用内置的模块来很简单的生成,简直是快速开发的福音.
只需要下面的一行命令就可以:$ python manage.py createsuperuser
接下来就会需要你填写Username,Email和password,输入正确之后就打开了Django的admin模块了.
接下来启动服务器,然后在浏览器中输入http://127.0.0.1:8000/admin/就可以访问admin后台了.
进入之后就可以看到如下的页面:
在polls/admin.py文件中添加一行代码,就可以把Question这个表添加在admin管理中,简直不要太爽了.
1 | from django.contrib import admin |
刷新页面之后,就可以在后台页面看到polls app中多了Questions的管理页面:
然后就可以对Question进行操作了~
Django确实非常的方便,在对于简单的页面的开发的时候,确实是很快.特别是类似于admin一样的现成的模块,拿来就可以直接使用.
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
Example 1:
1 | Input: 5 |
Example 2:
1 | Input: 1 |
水题,就是按位取反
1 | class Solution { |
看了Discuss里面的解法,还是有很多骚操作的大神的.这里贴出一个来看看.
链接
1 | class Solution { |
先让mask全部取1,然后对num取&操作,使得在对应前导0的地方全部置1,剩下的位全部是0,然后再对2个数进行&操作,就是取反了.