文章目录
准备
项目创建
- 创建虚拟环境
python -m venv venv_vcard
- 启动虚拟环境
cd venv_vcard\scripts\activate
- 安装django模块(1.11.4)
`pip install django’
安装固定版本’pip install django==1.11.4’
-
项目创建
django-admin startproject vcard
-
配置
settings.py
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
- 启动服务器
python manage.py runserver
app 程序准备
- 创建app
python manage.py startapp guestbook
- 在
setting.py
里注册app
INSTALLED_APPS = [...,'guestbook','blog',]
- 进行数据库迁移
python manage.py migrate
- 创建超级用户
python manage.py createsuperuser
添加 apps 目录
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
留言簿
留言簿后台管理
- 定义留言消息模型Massage
import reprlib
from django.db import models
class Message(models.Model):
"""留言消息类"""
name = models.CharField('用户名', max_length=20)
email = models.EmailField('邮箱',max_length=200)
message = models.TextField('留言')
active = models.BooleanField('有效', default=True)
posted = models.DateTimeField('发布时间', auto_now_add=True)
def __str__(self):
return f'{self.name} {reprlib.repr(self.message)}'
使用标准库
reprlib
中的repr()
方法进行格式化显示:长内容留住头和尾,中间用省略号表示
- 后台管理配置
from django.contrib import admin
from .models import Message
class MessageAdmin(admin.ModelAdmin):
"""留言消息管理"""
list_display = ('name', 'email', 'active', 'posted') #显示
list_filter = ('active', 'posted') #过滤条件
search_fields = ('name', 'message') #搜索
ordering = ('-posted',) #排序
#注册留言管理
admin.site.register(Message, MessageAdmin)
- 数据迁移
- 创建迁移
python manage.py makemigrations guestbook
- 执行迁移
python manage.py migrate guestbook 0001
- 创建迁移
留言簿前台提交
views.py
视图中编写视图
from django.shortcuts import render, redirect, reverse
from django.http import HttpResponse
from .models import Message
def post_message(request):
"""首页留言提交处理"""
if request.method == 'POST':
name = request.POST.get('name','')
email = request.POST.get('email','')
content = request.POST.get('message','')
if name and content:
msg = Message(name=name, email=email, message=content)
msg.save()
return redirect(reverse('home'))
else:
return HttpResponse('用户名及留言必须填写!')
return redirect(reverse('home'))
- 在主模块下添加url
...
from guestbook import views as gb_views
urlpatterns = [
url(r'^post-message/$', view=gb_views.post_message, name='post_message'),
...
]
- 在前台form表单中的添加提交地址与请求方式,并添加防止跨站点伪造
注意首页提交留言的字段id与name要保持与视图中获取的一致
<form action="/post-message/" method="post" id="contact_form">
{% csrf_token %}
....
</form>
前台HTML与视图整合
templates 模板呈现
- 在项目下创建
templates
文件夹,将前台模板复制在此路径下 - 在
setting.py
下进行配置
TEMPLATES = [ {'DIRS': [os.path.join(BASE_DIR, 'templates'),],..}]
- 在项目下的’views.py’创建视图
from django.shortcuts import render, redirect, reverse
def home(request):
"""vCard首页"""
return render(request, 'index.html')
- 在
urls.py
里添加url规则- 导入视图
from . import views
- 添加url规则
urlpatterns = [ url(r'^$', view=views.home, name='home'),..]
- 导入视图
static 静态资源文件管理
默认从app目录下查找static作为静态资源文件目录
- 在项目下创建
static
文件夹,将 静态资源复制在此路径下 - 在
setting.py
里手动配置静态资源目录,指定使用项目下的static
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]
- 模板页呈现静态资源
- 方法一:在所有静态资源链接前添加
/static/
引用资源位置 - 方法二:使用static指令
- 在网页前端添加
{% load static %}
# 载入静态资源 - 将静态资源链接改为
<link href="{% static 'style.css' %}"/>
由static指令自动转换呈现资源相对位置
- 在网页前端添加
模板继承
- 创建模板页’base.html’,在标题、正文部分使用
block
占位
{% block content %} {% endblock content %}