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