python 学习 38

django 06

现在我们需要创建一个关于博客的应用,用于书写发送博客。

现在我们在项目下新建一个python包-->blog  .然后再这个blog包下新建一个models.py,里面写入我们的博客模型:

#usr/bin/python
#-*-coding:utf-8-*-
from django.db import models
from blog_user.models import BlogUser

class Blog(models.Model):
    title=models.CharField(max_length=30,null=True)
    content=models.CharField(max_length=500,null=True)
    create_date=models.DateTimeField(null=True)
    #关联主外键
    blogUser=models.ForeignKey('blog_user.BlogUser',on_delete=None)

前三个为博客的标题,内容,创建时间,都不允许为空,第四个为作者,默认是登录的用户,这时我们需要关联外键到blog_user中的BlogUser上,同时需要导入包,并且设置删除删除博客时不删除外键。

现在我们需要将blog写入settings.py中的INSTALLED_APPS中

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog_user.apps.BlogUserConfig',
    'blog',
]

将'blog'添加进去即可。

现在我们需要执行manage 命令:

            makemigrations blog;

            sqlmigrate blog 0001;

            migrate blog 0001;

执行第一条,将会在blog文件夹中生成一个migrations包,里面会0001_initial.py,然后执行下面两条迁移文件,执行完成之后,查看数据库,会发现新增了一张表:


现在我们将a.html改为saveblog.html,使其用于发布博客(因为原先的a页面是登录之后才可查看,正好可以用来改为发布博客)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p{
            color: green;
        }
    </style>
</head>
<body>
<p>发布博客</p>

<form method="post" action="saveblog">
    {% csrf_token %}
    <p>
        请输入标题: <input type="text" name="title">
    </p>
    <p>
        请输入内容: <textarea name="content"></textarea>
    </p>
    <p>
        <input type="submit" name="" value="发布内容">
    </p>
</form>
</body>
</html>

但是我们想让blog负责有关博客的内容,而blog_user只负责创建用户相关的内容。

现在我们在blog中创建urls.py与views.py两个文件。

urls.py:

#usr/bin/python
#-*-coding:utf-8-*-

app_name='blog'

from django.urls import path
from blog import views

urlpatterns = [
    path('saveblog', views.saveblog),
]

同时将bolg_user中的urls里的原先的a路径删除,然后再在user中的urls总分发器中加入gy_01中urls的路径:

 path('blog/', include('blog.urls',namespace='blog')),

views.py中将原先blog_user中views中的a方法剪切过去。

注意:将所有的a改为saveblog  并注意要倒包。

最后将welcome2中的发布博客的a链接路径改为:/blog/saveblog

现在我们打开网页进入发布博客页面的路径会显示为blog模块下的路径。

接下来我们需要将saveblog页面中用户写的博客存入到数据库中,在views中的saveblog方法中添加一个判断,判断是get提交还是post提交:

#usr/bin/python
#-*-coding:utf-8-*-
from django.shortcuts import render,reverse,redirect
from blog.models import Blog
import datetime
from blog_user.models import BlogUser

def saveblog(request):
    if request.method=='GET':
        #判断user是否在session中
        if 'user' in request.session:
            return render(request, 'user/saveblog.html')

        #没有登录,记录下目标页面 去登录
        else:
            request.session['uri'] = request.get_raw_uri()
            return redirect(reverse('user:login'))

    elif request.method=='POST':
        #保存数据库 创建模型 获取设置属性值 save()
        blog= Blog()
        blog.title = request.POST.get('title')
        blog.content = request.POST.get('content')
        #当前时间
        blog.create_date= datetime.datetime.now()
        #当前用户
        session=request.session
        u_id=session.get('u_id')
        blog.blogUser_id=u_id
        try:
            blog.save()
            return redirect(reverse('user:welcome2'))
        except:
            return render(request,'user/saveblog.html',{'error':'保存失败,系统异常'})

同时在blog_user中views中的login方法中  获取session时,添加一条:session['u_id']=bloguserSet.first().id

上述当为post提交时,首先创建了一个模型blog,然后获取了标题,内容,当前时间,最后获取了session,并从session获取到登录用户的id,然后做了一个try-except判断,如果没有发生异常,则提交会数据库中,并重定向到welcome2页面,如果发生异常,则在页面上显示一个异常报错(此时还需要在saveblog.html上添加{{ error }})。

上传文件

我们要明白files的方法
文件对象: request.FILES.get()     # 获取上传的文件对象
文件对象.name              # 就是文件名
文件对象.size             # 就是文件字节
文件对象.chunks()           # 这个方法里面存放了上传的文件内容
form 表单里面要添加一个特殊的参数  enctype="multipart/form-data" # 文件的传输配置

首先我们在static下创建一个文件夹files ,用于保存我们上传的文件。

然后更改b.html   用来上传文件:

<from method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <p>
        用户名:<input type="text" name="uname">
    </p>
    <p>
        上传图片:<input type="file" name="myfile">
    </p>
    <p>
        <input type="submit" value="上传">
    </p>
</from>

然后更改blog_user中的views中的b方法:

import os
def b(request):
    if request.method=='GET':
        return render(request,'user/b.html')

    elif request.method=='POST':
        myfile = request.FILES.get('myfile')
        path = os.path.join('files',myfile.name)
        upfile = open(path,'wb+')
        for row in myfile:
            upfile.write(row)
        upfile.close()
        return HttpResponse('上传成功')
现在打开b页面即可上传文件,上传完成之后可去files中查看。

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值