学习请移步至:https://docs.djangoproject.com/zh-hans/2.1/intro/
创建管理员:py manage.py createsuperuser,之后按提示输入账号密码等
启动:py manage.py runserver
输入 localhost:8000/admin,输入管理员的账号密码,即可登录
可修改settings.py文件中的相关字段,将Django设置为中文
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
1.模型
- 编辑
models.py
文件,改变模型。 - 运行
python manage.py makemigrations
为模型的改变生成迁移文件。 - 运行
python manage.py migrate
来应用数据库迁移。
之后修改admin.py,将新建模型添加到管理员界面。
可以自行编写管理员界面。
from django.contrib import admin
# Register your models here.
#导入相关模型
from .models import Question, Choice
class ChoiceAdmin(admin.TabularInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date', {'fields': ['pub_date'], 'classes': ['collapse']})
]
# 接受列表,在question下拼接对应的choice
inlines = [ChoiceAdmin]
# 列表表头
list_display = ('question_text','pub_date')
# 增加搜索框
search_fields = ['question_text']
# 增加日期条件
list_filter = ['pub_date']
# 设置分页
list_per_page = 5
admin.site.register(Question, QuestionAdmin)
DateTimeField、DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime()、date()、time()三中对象。
DateTimeField.auto_now
这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储“最后修改时间”的场景下,十分方便。
DateTimeField.auto_now_add
这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。
若将上述两个属性设置为TRUE,则在Django的admin中是只读状态。
html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td>{{ infor.updatetime|date:"Y-m-d H:i:s" }}</td> 类似的过滤器。刷新页面,即可正常显示。
2.视图
视图必须做的只有两件事:返回一个HttpReponse对象,或者抛出异常。
普通视图(主要是查找数据):
查询范围数据:model.objects.order_by('****')[:]
查询具体数据:使用 get_object_or_404(model, pk=id),model为模型实例,id为需要查询的数据键值
表单视图(增加、修改数据):
增加,
if request.method != 'POST':
form = modelForm()
else:
form = modelForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('***:***'))
return render(request, '***/***.html', {'form': form})
修改,
blog_message = get_object_or_404(blog, pk=blog_id)
author_message = blog_message.author
if request.method != 'POST':
form = blogForm(instance=blog_message)
else:
form = blogForm(instance=blog_message, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('blog:blogMessage',args=[author_message.id] ))
return render(request, 'blog/editBlog.html', {'form': form, 'author': author_message, 'blog': blog_message})
首先判断该请求类型,在根据请求类型执行相关操作。
修改类表单:以用户-博客为例。
先获取相关博客,并关联至相关用户。若为POST请求,则使用实参instance,data。实参instance填充既有数据,根据data=request.POST中的相关数据进行相应的修改。若不为POST请求,则只传入实参instance,使用既有数据填充表单即可。
3.模板
模板继承:创建父模板,定义相关页面属性,在后续的模板中,使用{%extends "*****/***.html"%}导入父模板。
在父模板中,还可以使用{%block name%}{%endblock name%}定义一个名为name 的block标签,使后续模板能够在该区域中添加指定的内容。(在子模板中,也使用同样的语法标准进行引用赋值。)
4.表单
from django import forms
from .models import blog,author
class authorAdd(forms.ModelForm):
class Meta:
model = author
fields = ['author_name','author_sex','author_age',]
导入django的forms包,并导入项目对应的model类。
创建class,继承自forms.ModelForm,其中的内部类表示表单的来自某个模型,fields表示需要在表单中显示的字段。
想要定制化表单格式,可以使用:
widgets = {'blog_text':forms.Textarea(attrs{'cols':80}),}