django项目:实现一个完整的博客功能(1)

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)

页面的代码完善,登录前显示注册和登录功能,登录后只显示姓名和退出功能。

抽象出父模板,设置子模板继承,避免每个页面代码的重复


子模板代码的变化单独一个页面



猜你喜欢

转载自blog.csdn.net/fenglei0415/article/details/80199161