此次为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方面的知识,最后会对前端的界面设计重新构造改进。