专栏首页python3基于django的个人博客网站建立(五)

基于django的个人博客网站建立(五)

基于django的个人博客网站建立(五)

前言

之前鸽了两天,今天继续再写点

主要内容

今天加了个展示照片的功能,就叫他生活记录吧

先建表

class Record(models.Model):
    title = models.CharField(max_length=128)
    content = models.TextField()
    picture = models.CharField(max_length=128)
    creationTime = models.DateTimeField(auto_now_add=True)

主要功能就是为了上传一张图片,并添加标题,内容来记录一些有趣的事情

于是在后台要添加图片的上传

借用了别人点击上传图片后显示图片的代码

<input type="file" id="chooseImage" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg" name="picture" class="form-control" aria-invalid="false">
<!-- 保存用户自定义的背景图片 -->
<img id="cropedBigImg" value='custom' alt="请添加图片" data-address='' title="我的图片"/>

<script>

$('#chooseImage').on('change',function(){
       var filePath = $(this).val(),         //获取到input的value,里面是文件的路径
          fileFormat = filePath.substring(filePath.lastIndexOf(".")).toLowerCase()
          src = window.URL.createObjectURL(this.files[0]); //转成可以在本地预览的格式

       // 检查是否是图片
       if( !fileFormat.match(/.png|.jpg|.jpeg/) ) {
          alert('请选择图片');
           return;
        }

        $('#cropedBigImg').attr('src',src);
});

</script>

效果为:

处理的视图函数为:

@auth
def publish_record(request):
    if request.method == 'GET':
        return render(request, 'backend/publish_record.html')
    if request.method == 'POST':
        if request.FILES:
            myFile = None
            for i in request.FILES:
                myFile = request.FILES[i]
            if myFile:
                dir = os.path.join(
                    os.path.join(
                    os.path.join(
                    os.path.join(
                        BASE_DIR,
                        'statics'),'assets'),'images'),
                    'record')
                destination = open(os.path.join(dir, myFile.name),
                                   'wb+')
                for chunk in myFile.chunks():
                    destination.write(chunk)
                destination.close()

            title = request.POST.get('title')
            content = request.POST.get('content')
            models.Record.objects.create(title=title,content=content,picture=myFile.name)
        else:
            messages.error(request,'输入信息有误')
        return redirect('/backend/publish_record')

主要是把图片放到一个固定的文件夹下,之后在页面显示时路径的前缀是固定的

在前端显示为

接下来设置默认的访问错误页面:

在url.py中添加

handler403 = views.permission_denied
handler404 = views.page_not_found
handler500 = views.page_error

然后编写对应的视图处理函数

def permission_denied(request):
    return render(request,'show/403.html')

def page_not_found(request):
    return render(request, 'show/404.html')

def page_error(request):
    return render(request, 'show/500.html')

然后随意访问一个不存在的url:

最后加一个关于界面,也就是一个简单的介绍,内容也用markdown编辑

首先后台添加一个关于内容的输入页面

在后台通过.md文件的方式存储内容

def about_edit(request):
    if request.method == 'GET':
        dir = os.path.join(
            os.path.join(
                os.path.join(
                    os.path.join(
                        BASE_DIR,
                        'statics'), 'assets'), 'about'),
            'about.md')
        with open(dir,'r+') as f:
            content = f.read()

        return render(request,'backend/about_edit.html',{'content':content})
    if request.method == 'POST':
        dir = os.path.join(
            os.path.join(
                os.path.join(
                    os.path.join(
                        BASE_DIR,
                        'statics'), 'assets'), 'about'),
            'about.md')
        content = request.POST.get('content')
        with open(dir,'w+') as f:
            f.write(content)

        return redirect('/backend/about_edit')

这样就可以在前端显示关于页面的内容了

def about(request):
    if request.method == 'GET':
        all_type = models.ArticleType.objects.all()
        dir = os.path.join(
            os.path.join(
                os.path.join(
                    os.path.join(
                        BASE_DIR,
                        'statics'), 'assets'), 'about'),
            'about.md')
        with open(dir, 'r+') as f:
            content = f.read()
        content = markdown(content)
        return render(request, 'show/about.html', {'all_type': all_type,'content':content })

总结

基本内容已经完成,今天刚搁腾讯云那提交了网站备案审核,明天预计把项目先部署到服务器上看看效果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python3安装解决ssl问题

    使用yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 问题出现原因:

    用户2398817
  • 【达达前端】Ajax实战项目源码讲解(快速入门的实例)Github源码

    什么是Ajax技术?实战中的运用ajax技术,了解前后端交互的方式,了解移动端的模式,了解H5的新技术,了解CSS3的使用,和JQuery的使用。

    达达前端
  • 解决WordPress图片生成多张缩略图的几种方法

    对于网站运营人员来说,网站备份是很重要的。最近我在备份网站数据时,也就几天时间,发现备份的压缩文件增加了好几十M,由于是新的网站,所以这种增长速度是非常快的。于...

    IDC科技
  • 中学生CTF几道web题解

    之前偶然发现中学生 CTF 这个平台,就做了一下。结果嘛,学到不少东西,大佬们太强了

    yichen
  • 2019"深思杯"部分复现

    这道题出来的时候真的是一点思路都没有,一直以为是什么编码来着,看了大佬们的 wp 原来是画图

    yichen
  • python3基础学习(http hos

      简单版http host头***漏洞POC,没有对异常进行处理,没有对意外情况进行处理,所以是简单版!代码如下:

    用户2398817
  • python3 selenium + f

    一、 分析: 抓取动态页面js加载的人民日报里面的新闻详情 https://wap.peopleapp.com/news/1 先打开,然后查看网页源码,发现是...

    用户2398817
  • nginx1.16中yii2.0.27去除index.php?r=相关配置

    秋雨
  • Python3 urllib.parse

    用户2398817
  • sanic中文文档

    Install Sanic:python3 -m pip install sanic example

    用户2398817

扫码关注云+社区

领取腾讯云代金券