blog开发流程
1.分析博客页面:
1)完成网站的模块划分
2)从模板页面中抽象出父模板,完成模板页面继承
3)分析模块当中的数据模型,确定模型类当中的字段
2.分析博客实现的功能:
1)用户模块的注册登录,增删改查,模型类的继承,form验证,
2)一篇文章有一个作者,多个标签,一种类型,添加评论,浏览量,文章点赞
3)文章排行榜,归档
4)标签云
5)文章分页, 文章详情页
6)添加删除文章
#调用django内部用户模块,相关字段都封装好,可以扩展补充
from django.db import models from datetime import datetime from django.contrib.auth.models import AbstractUser # Create your models here. class UserProfile(AbstractUser): """ 用户模块扩展,调用django内部模型类继承 """ add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') nick_name = models.CharField(max_length=10, verbose_name='昵称', blank=True, null=True) def __str__(self): return self.username class Meta: verbose_name = '用户信息' verbose_name_plural = verbose_name
配置url
from django.conf.urls import url from .views import user_register, user_login, user_logout urlpatterns = [ url(r'^user_register/$', user_register, name='user_register'), url(r'^user_login/$', user_login, name='user_login'), url(r'^user_logout/$', user_logout, name='user_logout'), ]
用户模块视图
from django.shortcuts import render, redirect from .models import UserProfile from django.core.urlresolvers import reverse from django.contrib.auth import authenticate, login, logout from .forms import UserRegisterForm, UserLoginForm def user_register(request): """ 用户注册模块 添加了form表单验证 """ if request.method == 'GET': return render(request, 'reg.html') else: # 实例form类,用来验证用户提交的数据 user_register_form = UserRegisterForm(request.POST) if user_register_form.is_valid(): # 返回值为True或False username = user_register_form.cleaned_data['username'] password = user_register_form.cleaned_data['password'] password1 = user_register_form.cleaned_data['password1'] user = UserProfile.objects.filter(username=username) if user: return render(request, 'reg.html', { 'mag': '账号已存在' }) else: if password1 == password: a = UserProfile() a.password = password a.username = username # 内部函数自动加密功能 a.set_password(password) a.save() return redirect(reverse('users:user_login')) else: return render(request, 'reg.html', { 'msg': '密码不一致' }) else: return render(request, 'reg.html', { 'user_register_form': user_register_form }) def user_login(request): """ 用户登录模块,调用django内部函数login,封装好了session功能 """ if request.method == 'GET': return render(request, 'login.html') else: user_login_form = UserLoginForm(request.POST) if user_login_form.is_valid(): username = user_login_form.cleaned_data['username'] password = user_login_form.cleaned_data['password'] user = authenticate(username=username, password=password) if user: login(request, user) return redirect(reverse('index')) else: return render(request, 'login.html', { 'msg': '用户名或者密码错误!', 'user_login_form': user_login_form }) else: pass def user_logout(request): """ 用户退出模块, 调用django内部函数logout """ logout(request) return render(request, 'index.html')
用户模块增加forms.py文件用来设置form验证
from django import forms class UserRegisterForm(forms.Form): """form表单注册验证""" username = forms.CharField(max_length=20, min_length=6, required=True, error_messages={'invalid': '长度最大20,最小6'},) email = forms.EmailField(error_messages={ # 自定义验证字段 'invalid': '格式不对,最大长度20,最小6' }, required=False) url = forms.URLField(error_messages={ 'invalid': '格式不对,最大长度20,最小6' }, required=False) password = forms.CharField(max_length=20, min_length=6, required=True) password1 = forms.CharField(max_length=20, min_length=6, required=True)
页面的代码完善,登录前显示注册和登录功能,登录后只显示姓名和退出功能。
抽象出父模板,设置子模板继承,避免每个页面代码的重复
子模板代码的变化单独一个页面