Django项目:搭建博客

此次为0前端基础下的博客搭建,重点在于功能与内部逻辑方面

实现的功能:1.用户注册登录已经用户登录状态的保持(这里不用Django自带的user,是自己写的)

2.用户发表博文

3.基本的博客分类、博客分支页面的搭建。

页面代码较多,若要了解详细内容请访问我的GitHub链接

首先代码先贴出来

views.py

from django.shortcuts import render,render_to_response
from .models import *
import time
# Create your views here.
from django.http import HttpResponseRedirect
def showregister(request):             #转到注册页面
    return render(request,'myblog/register.html')

def register(request):    #注册函数
    if request.method=='POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        UserResult = User.objects.filter(username=username)  #判断是否已有此用户
        if (len(UserResult)>0):
            FailRegisterResult = '用户已存在!'
            return render(request,'myblog/register.html',{'failregisterresult':FailRegisterResult})
        else:
            userResult = User.objects.create(username=username,password=password)
            userResult.save()
            SuccessLoginResult = '注册成功!请登录'
            return render(request,'myblog/login.html',{'successloginresult':SuccessLoginResult})

    else:
        pass
def showlogin(request):           #转到登录页面
    return render(request,'myblog/login.html')

def login(request):  #登录函数
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        RegisterResult = User.objects.filter(username=username,password=password)
        if (len(RegisterResult)>0):
            request.session['name'] = username
            return HttpResponseRedirect('/index')
        else:
            FailLoginResult = '该用户不存在或密码错误!'
            return render(request,'myblog/login.html',{'failloginresult':FailLoginResult})
    else:
        pass

def index(request):               #主页
    category = Category.objects.all()
    username = request.session.get('name')
    return render(request,'myblog/index.html',{'category':category,
                                               'username':username})

def category(request,id):              #进入某个类型版块页面
    category = Category.objects.get(pk=id)
    article = Article.objects.filter(category_id=id)
    print('文章内容:',article)
    username = request.session.get('name')
    return render(request,'myblog/article.html',{'article':article,
                                                 'category':category,
                                                 'username':username})

def articledetail(request,article_id):           #查看文章详细内容
    article_detail = Article.objects.get(id = article_id)
    article_category = Category.objects.get(pk = article_detail.category_id)
    username = request.session.get('name')
    return render(request,'myblog/articledetail.html',{'article_detail':article_detail,'article_category':article_category,
                                                       'username':username})

def logout(request):     #退出登录,清除session
    request.session.clear()
    return HttpResponseRedirect('/index')

def showuseredit(request):    #转到发表页面
    category = Category.objects.all()
    tags = Tag.objects.all()
    return render(request,'myblog/useredit.html',{'category':category,
                                                  'tags':tags})

def useredit(request):      #用户发表博文
    title = request.POST.get('title')
    body = request.POST.get('body')
    date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    print('时间:',date)
    category = request.POST.get('category')
    tags = request.POST.get('tags')
    editer = request.session.get('name')
    if editer == None:
        editerisnull = '你还未登录,请登录后再创作!'
        return render(request,'myblog/login.html',{'editerisnull':editerisnull})
    else:
        category_id = Category.objects.get(name=category)
        tags_id = Tag.objects.get(name=tags)
        editer_id = User.objects.get(username=editer)
        Article_Update = Article.objects.create(title=title,body=body,date=date,category_id=category_id.id,tags_id=tags_id.id,editer_id=editer_id.id)
        Article_Update.save()

        return HttpResponseRedirect('/category/{}'.format(category_id.id))

model.py

from django.db import models

# Create your models here.

class Category(models.Model):    #类型模块表
    name = models.CharField('名称', max_length = 20)
    def __str__(self):
        return self.name


class Tag(models.Model):       #标签表
    name = models.CharField('名称', max_length = 20)
    def __str__(self):
        return self.name

class User(models.Model):              #用户表
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=50)

    def __str__(self):
        return self.username

class Article(models.Model):              #文章表
    title = models.CharField('标题',max_length = 150)
    body = models.TextField('正文')
    date = models.DateTimeField('发布时间')
    category = models.ForeignKey(Category, verbose_name='分类',on_delete=models.CASCADE)
    tags = models.ForeignKey(Tag, verbose_name = '标签',on_delete=models.CASCADE,null=True,blank=True) #null=True表示数据库中该字段可为空,blank=Ture表示admin中添加数据可以为空
    editer = models.ForeignKey(User,verbose_name='作者',on_delete=models.CASCADE)

    def __str__(self):
        return self.title

urls.py

from django.conf.urls import url,include
from . import views

app_name='[myblog]'
urlpatterns = [
    url(r'^login/',views.login),
    url(r'^register/', views.register),
    url(r'^showlogin',views.showlogin),
    url(r'^showregister', views.showregister),
    url(r'^category/(\d+)/$', views.category),
    url(r'^index/$',views.index),
    url(r'^articledetail/(\d+)/$',views.articledetail),
    url(r'^logout/$',views.logout),
    url(r'^useredit/$',views.useredit),
    url(r'^showuseredit/$',views.showuseredit),
]

比较重要的几个文件的code已经在上面,模板文件有以下几个,直接截图了,详细代码请关注我上面的github链接


分别解释一下:1.article.html:是显示某个类型模块中所有的文章,只显示文章的标题

2.articledetail.html:顾名思义,是显示文章的具体内容

3.index.html:主页,显示的是所有类型模块

4.login.html:登录页面

5.register.html:注册页面

6.useredit.html:用户发表博文页面

接下来展示一下项目的效果图:

主页(还未登录),有前往登录按钮:


接下来我们前往登录:


还没有账号,那么我们就去注册一个,点击【前往注册】:


注册成功,回到登录页面,会提示已注册成功!:


接下来就登录进去:


登录进去后,就发现我们的账号名已经显示出来,而且操作功能也变为发布博客与退出功能两个选项,接下来我们选择发布博客:


点击提交,提交后,会直接转到文章选择分类的那个版块页面当中:


接下来我们点击进去看看文章的内容:


创建的时间是根据发表的系统的时间来给定的,用户不可自定义时间。

接下来我们点击退出登录,就会直接回到登录页面,且登录用户的状态也会被清空。


项目分析:1.对于一个真正的博客,功能还是缺少很多,例如用户管理,修改密码等等,用户的头像,用户的文章修改和删除,后期有时间将会加上

2.前端页面效果太过于简易,接下来会加入用户发表博文界面的富文本使用,并且接下来会去专门学HTML/CSS/JS方面的知识,最后会对前端的界面设计重新构造改进。



猜你喜欢

转载自blog.csdn.net/weixin_38654336/article/details/80143183