Python之Django框架搭建一个简易的博客

虽然之前有过一定的学习,但是再做更深一点的内容还是有很多要学的东西以及很大的难度,所以再已有的实例的情况下,自己亲自动手进行操作,并按照自己的想法实现整个过程。
① 首先,建立一个Django项目的工程(使用django-admin.py startproject ×××)
② 创建app并配置相应的文件(app根据用户的功能模块去划分:manage.py startapp ×××),并在setting.py中添加app等内容。
③ 上面是完成本次工程的基本的操作和配置,接下来就是在已有的配置的基础上,分别完成model模块、views模块、urls模块,可以理解为MVC结构,其中model模块的功能是完成数据库的创建以及框架和数据库之间的默认接口;views模块的功能是负责将数据很好的显示在前端以及控制前端的内容;urls模块的功能则是将各个视图所返回的值能够通过urls模块将其显示在前端。
其大致流程可以描述为如下图所示:
这里写图片描述
具体开发过程:
① 建表:
表一:(文章)

class Article(models.Model):
    #文章表
    STATUS_CHOICES = (
        ('d', 'Draft'),
        ('p', 'Published'),
    )
    #标题是一个位置参数
    title = models.CharField('标题', max_length = 70)
    article = models.TextField('正文')
    #auto_now_add设为True表示在文章创建时自动添加 时间(对于DateTimeField)
    created_time = models.DateTimeField('创建时间', auto_now_add = True)
    #auto_now为True表示每次自动修改时间
    modified_time = models.DateTimeField('修改时间', auto_now = True)
    #help_text表示在该field被渲染成form是显示帮助信息
    abstruct = models.CharField('摘要', max_length = 54, blank = True, null = True, help_text = '可选,如若为空将摘取正文前的54个字符')
    #field的choices参数需要的值,choices选项有两个可以选定的值:Draft,Published,但是在数据库中 存储的值是'd'和'p'
    status = models.CharField('文章状态', max_length = 1, choices = STATUS_CHOICES)
    reviews = models.PositiveIntegerField('浏览量', default = 0)
    loves = models.PositiveIntegerField('点赞数', default = 0)
    top = models.BooleanField('置顶', default = False)
    #on_delete = models.SET_NULL表示在删除某个分类时则该分类对应的外键都删除
    category = models.ForeignKey('Category', verbose_name = '分类', null = True, on_delete = models.SET_NULL)

    def __str__(self):
        return self.title.encode('utf-8')

    class Meta:
        ordering = ['-modified_time']

这里写图片描述
表二:(分类表)

class Category(models.Model):
    name = models.CharField('类名', max_length = 20)
    created_time = models.DateTimeField('创建时间', auto_now_add = True)
    modified_time = models.DateTimeField('修改时间', auto_now = True)

    def __str__(self):
        return self.name

这里写图片描述
表三:(标签表)

class Tag(models.Model):
    #可以为后期实现标签云做基础
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

这里写图片描述
表四:(用户表)

class User(models.Model):
    User_name = models.CharField(max_length = 10)
    User_password = models.CharField(max_length = 10)

    def __str__(self):
        return self.User_name

这里写图片描述
② 视图管理:(选取部分)
视图一:(发表博客)

def contact(request):
    L_list = models.Article.objects.all()
    if request.method == 'POST':
        form = forms.Submit_Article(request.POST)
        if form.is_valid():
            Article_name = form.cleaned_data['Article_name']
            Article_text = form.cleaned_data['Article_text']
            models.Article.objects.create(title = Article_name, article = Article_text)
            return HttpResponseRedirect('')
    else:
        form = forms.Submit_Article()
return render(request, 'contact.html', {'form':form, 'literary':L_list})

这里写图片描述
视图二:(实现登录功能)

def login(request):
    L_list = models.User.objects.all()
    if request.method == 'POST':
        form = forms.Login(request.POST)
        if form.is_valid():
            User_name = form.cleaned_data['User_name']
            User_password = form.cleaned_data['User_password']
            #获取的表单数据与数据库进行比较
            user = models.User.objects.filter(User_name__exact = User_name, User_password__exact = User_password)
            if user:
                #成功查找,跳转index
                responce = HttpResponseRedirect('/archives')
                #将User_name写入浏览器cookie,失效时间为3600
                responce.set_cookie('User_name', User_name, 3600)
                return responce
            else:
                #查找失败,还在Login
                return HttpResponseRedirect('/index')
            #models.User.objects.create(User_name = User_name, User_password = User_password)
            return HttpResponseRedirect('')
    else:
        form = forms.Login()
return render(request, 'index.html', {'form':form, 'literary':L_list})

这里写图片描述
③ url映射关系:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.home, name = 'home'),
    url(r'^(?P<id>\d+)/$', views.detail, name = 'detail'),
    url(r'^archives/$', views.archives, name = 'archives'),
    url(r'^aboutme/$', views.about_me, name = 'about_me'),
    url(r'^tag/(?P<tag>\w+)/$', views.search_tag, name = 'search_tag'),
    url(r'^search/$',views.blog_search, name = 'search'),
    url(r'^feed/$', views.contact, name = 'RSS'),
    url(r'^login/$', views.login, name = 'login'),
]

测试:
发表博客:(保存到数据库)
这里写图片描述
这里写图片描述
主页:
这里写图片描述
归档:将在一定日期内发表的文章收集在一起
这里写图片描述
博客文章:
这里写图片描述
站内搜索:
这里写图片描述
后台监测:
这里写图片描述
参考资料:
Django学习小组:博客开发实战
https://www.jianshu.com/p/3bf9fb2a7e31
Django1.8.2文档
http://usyiyi.cn/translate/django_182/index.html
The Django Book
(http://djangobook.py3k.cn/2.0/)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值