Django入门笔记【二】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/

*该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法。

1. 创建管理员(admin user)

运行代码

1 $ python manage.py createsuperuser
2
3 Username: admin
4 Email address: [email protected]
5
6 Password: *********
7 Password(again): *********
8 Superuser created successfully.

2. 启动开发服务器(development server)

启动服务器

1 $ python manage.py runserver

打开本地域名,比如http://127.0.0.1:8000/admin/,浏览器将显示管理员登陆页面。

3. 进入管理员页面(admin site)

输入用户名和密码

4. 使投票应用可以被管理员更改

投票应用显示在管理员页面

1 #polls/admin.py
2
3 from django.contrib import admin
4
5 from .models import Question
6
7 admin.site.register(Question)

5. 探索管理员功能

6. 自定义管理员表单(admin form)

对admin.site.register(Question)进行替换

 1 #polls/admin.py
 2
 3 from django.contrib import admin
 4
 5 from .models import Question
 6
 7 class QuestionAdmin(admin.ModelAdmin):
 8     fields = [‘pub_date‘, ‘question_text‘]
 9
10 admin.site.register(Question, QuestionAdmin)

基本的思路是:创建一个ModelAdmin对象,然后将它作为第二个参数传递到register()方法中

再比如,

 1 #polls/admin.py
 2
 3 from django.contrib import admin
 4
 5 from .models import Question
 6
 7 class QuestionAdmin(admin.ModelAdmin):
 8     fieldsets = [
 9         (None,                    {‘fields‘: [‘question_text‘]}),
10         (‘Date information‘, {‘fields‘: [‘pub_date‘], ‘classes‘:[‘collapse‘]}),
11     ]
12
13 admin.site.register(Question, QuestionAdmin)

7. 添加关联对象(related objects)

在投票应用中,Question有关联对象Choice。有两种方式添加关联对象

1 #polls/admin.py
2
3 from django.contrib import admin
4
5 from .models import Choice, Question
6 # ...
7 admin.site.register(Choice)

还可以

 1 #polls/admin.py
 2
 3 from django.contrib import admin
 4
 5 from .models import Choice, Question
 6
 7 class ChoiceInline(admin.StackedInline):
 8     model = Choice
 9     extra = 3
10
11 class QuestionAdmin(admin.ModelAdmin):
12     fieldsets = [
13         (None,                   {‘fields‘: [‘question_text‘]}),
14         (‘Date information‘,{‘fields‘: [‘pub_date‘], ‘classes‘: [‘collapse‘]}),
15     ]
16     inlines = [ChoiceInline]
17
18 admin.site.register(Question, QuestionAdmin)

此外,以下代码可以让界面简洁

1 # polls/admin.py
2
3 class ChoiceInline(admin.TabularInline):
4     # ...

8. 自定义更改列表(the admin change list)

运行代码

1 # polls/admin.py
2
3 class QuestionAdmin(admin.ModelAdmin):
4     # ...
5     list_display = (‘question_text‘, ‘pub_date‘, ‘was_published_recently‘)

对于自定义方法was_published_recently,排序在默认状态下不能实现,且列表名称为方法名称,可以通过以下方式改进

1 # polls/models.py
2
3 class Question(models.Model):
4     # ...
5     def was_published_recently(self):
6         return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
7     was_published_recently.admin_order_field = ‘pub_date‘
8     was_published_recently.boolean = True
9     was_published_recently.short_description = ‘Published recently?‘

可以向QuestionAdmin对象添加过滤器和搜索功能

1 # polls/admin.py
2
3 class QuestionAdmin(admin.ModelAdmin):
4     # ...
5     list_filter = [‘pub_date‘]
6     search_fields = [‘question_text‘]

9. 自定义管理页面外观(admin look and feel)

在manage.py所在目录下,创建templates子目录。添加DIRS到设置文件(mysite/settings.py,牢记)中的TEMPLATES设置:

 1 TEMPLATES = [
 2     {
 3         ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘,
 4         ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)],
 5         ‘APP_DIRS‘: True,
 6         ‘OPTIONS‘: {
 7             ‘context_processors‘: [
 8                 ‘django.template.context_processors.debug‘,
 9                 ‘django.template.context_processors.request‘,
10                 ‘django.contrib.auth.context_processors.auth‘,
11                 ‘django.contrib.messages.context_processors.messages‘,
12             ],
13         },
14     },
15 ]

在templates目录中,建立admin子目录,并复制django/contrib/admin/templates中的模板admin/base_site.html。然后对base_site.html进行修改。

10. 自定义应用模板(application‘s templates)及管理索引页面(admin index page)

步骤和9类似

--The End--

时间: 2024-08-06 19:08:59

Django入门笔记【二】的相关文章

Django入门笔记

Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有Django需要的依赖包 编辑器:Aptana,一个强大的IDE工具,可以在上边新建模板,支持各种语言 Django项目创建 **可以用附件中的工程目录或者自己新建 新建工程-创建Django 新建工程-配置Django工程 工程创建完成后,会在工程目录中自动创建以下几个py文件 settings.

Django入门笔记【一】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 1. 查看Django是否安装及版本 1 $ python -c "import django; print(django.get_version())" 2. 创建一个项目(project) 通过cd方式进入自创目录,然后运行: 1 $ django-admin startprojec

Django入门笔记【三】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. Public interface - views. 1. 定义 视图(View)是Django应用中用于实现某一特定功能的Web页面.比如,一个博客可以有博客展示页面,博客创建页面,评论页面. 2. 视图示例 写入代码 1 #polls/views.py 2 3 from django.http

Django入门笔记【六】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. *静态文件(static files):images, JavaScript, CSS 1. 自定义应用外观(look and feel) 创建polls/static目录.Django的STATICFILES_FINDERS会寻找静态文件.在static目录下,创建polls/style.css

Django入门笔记【四】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 表单和通用视图(Forms&Generic Views) 1. 简单的表单 修改detail.html中的代码,使之含有<form>元素: 1 # polls/templates/polls/detail.html 2 3 <h1>{{ question.question_t

Django 学习笔记二

通过邮件分享post django创建表单 from django import forms class EmailPostForm(forms.Form): name = forms.CharField(max_length=25) email = forms.EmailField() to = forms.EmailField() comments = forms.CharField(required=False, widget=forms.Textarea) 在视图中处理表单 from d

django学习笔记二:一个项目多个App项目搭建

django充许在一个项目中存在多个app,如一个大门户网站中可以包含论坛,新闻等内容,其中每一个模块称之为一个App,也可以理解为一个个独立的小型项目最终集成在一个门户网站中最终呈现给用户 本次测试以python 2.7 pycharm5环境为基准 首先建立项目,项目名称:testDjango 其次分别建立相应的App模块:todo,oa,web 如图所示: 在testDjango项目中找到testDjango文件夹,打开urls.py路由配置文件并添加以下配置 from django.con

Django学习笔记二

Django的数据库:sqlite3 1.数据库配置 2.创建app Django规定,如果要使用模型,必须要创建一个app. python manage.py startapp TestModel project 和app 之间的区别 一个project包含很多个Django app以及对它们的配置. 技术上,project的作用是提供配置文件,比方说哪里定义数据库连接信息, 安装的app列表, TEMPLATE_DIRS ,等等. 一个app是一套Django功能的集合,通常包括模型和视图,

nodeJs入门笔记(二)

js中window通常是全局变量 global 是node.js里的全局变量 node中能访问的对象一般都是 global的 属性 global 对象属性 process 用于描述当前Node 进程状态的对象,提供了一个与操作系统的简单接口. process.argv :命令行参数数组,第一个元素是 node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数 console.log(process.argv); $ node argv.js 1991 name=byvoid --v