19-1 博客 新建一个Django项目,将其命名为Blog。在这个项目中,创建一个名为blogs 的应用程序,并在其中创建一个名为BlogPost 的模型。这个模型应包含title 、text 和date_added 等字段。为这个项目创建一个超级用户,并使用管理网站创建几个简短的帖子。创建一个主页,在其中按时间顺序显示所有的帖子。
创建两个表单,其中一个用于发布新帖子,另一个用于编辑既有的帖子。尝试填写这些表单,确认它们能够正确工作。
1 创建虚拟环境
Windows:
'cmd' # 在该目录中运行终端
python -m venv ll_env # ll是两个小写字母l
2 激活虚拟环境
ll_env\Scripts\activate
3 安装Django
(ll_env) Blog>pip install django
4 创建项目
(ll_env) Blog>django-admin startproject Blog .
5 创建数据库
(ll_env) Blog>python manage.py migrate
6 创建应用程序
(ll_env) Blog>python manage.py startapp blogs
7 创建模型
models.py
from django.db import models
# Create your models here.
class BlogPost(models.Modes):
""" 博客页面 """
title = models.CharField(max_length=200)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbase_name_plural = 'BlogPost' # 让他显示为BlogPost
def __str__(self):
""" 返回模型字符串表示 """
return self.text
8 激活模型
settings.py
# Application definition
INSTALLED_APPS = [
# 我的应用程序
'blogs',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
python manage.py makemigrations blogs
python manage.py migrate
9 创建超级用户
(ll_env) D:\Blog>python manage.py createsuperuser
admin.py
from django.contrib import admin
from .models import BlogPost
admin.site.register(BlogPost)
10 表单
forms.py
from django import forms
from .models import BlogPost
class BlogPostForm(forms.ModelForm):
class Meta:
model = BlogPost
fields = ['title','text'] # 获取模型里的两个字段
widgets = {
'text': forms.Textarea(attrs={
'cols':80})}
class BlogForm(forms.ModelForm):
class Meta:
model = BlogPost
fields = ['title','text']
labels = {
'text':'','title':''}
widgets = {
'text': forms.Textarea(attrs={
'cols':80})}
11 视图
views.py
from django.shortcuts import render,redirect
from .models import BlogPost
from .forms import BlogPostForm,BlogForm
def index(request):
""" 主页,显示所有 """
blogposts = BlogPost.objects.order_by('-date_added')
context = {
'blogposts':blogposts}
return render(request,'blogs/index.html',context)
def new_blog(request):
""" 添加新博客 """
if request.method != 'POST':
form = BlogPostForm()
else:
form = BlogPostForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('blogs:index')
context = {
'form':form}
return render(request,'blogs/new_blog.html',context)
def edit_blog(request,blog_id):
""" 编辑博客 """
blogpost = BlogPost.objects.get(id=blog_id)
title = blogpost.title
if request.method != 'POST':
form = BlogPostForm(instance=blogpost)
else