一、创建一个新的模块
1.在新的模块中添加新的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)#标题
context=models.CharField(max_length=500,null=True)#内容
create_date=models.DateTimeField(null=True)#创建时间 默认为当前时间
#关联主外键
blogUser=models.ForeignKey('blog_user.BlogUser',on_delete=None)
2.在setting.py中找到INSTALLED_APPS启用blog模块
3.CTRL+ALT+R运行shell命令创建表
4.在blog下创建新的视图views.py和urls.py
views.py 要求:发布成功获取用户发布标题,内容,时间,id保存在数据库中,
发布失败重新进入发布页面
#usr/bin/python
#-*-coding:utf-8-*-
from django.shortcuts import render, redirect,reverse
from blog.models import Blog
from datetime import datetime
from blog_user.models import BlogUser
def saveblog(request):
if request.method=='GET':
#判断 user 是否在session中
if 'user' in request.session:
#登录 跳转到a页面
return render(request, 'user/saveblog.html', {})
else:
#没有登录 记录下目标页
session=request.session
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.context=request.POST.get('context')
blog.create_date=datetime.now()
#获取当前用户
session=request.session
#获取登录时保存的用户id
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','保存失败...'})
urls.py
#usr/bin/python
#-*-coding:utf-8-*-
from django.urls import path
from blog import views
app_name='blog'
urlpatterns=[
path('saveblog',views.saveblog),
]
然后在exercise/urls下配置路径
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('user/',include('zhaofan_user.urls',namespace='user')),
path('blog/',include('blog.urls',namespace="blog"))
]
修改a.html为saveblog.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
{% csrf_token %}
<p>
请输入标题:<input type="text" name="title">
</p>
<p>
请输入内容:<textarea name="context"></textarea>
</p>
<p>
<input type="submit" value="确认发布">
</p>
</form>
</body>
</html>
简单的发布页面为
二、文件上传,富文本编辑器
我们首先要明白files的方法
文件对象:
request.FILES.get() #获取上传的文件对象
wenjianduixiang.name #文件名
文件对象.size #文件字节
文件对象的.chunks( ) #这个方法里面存放了上传的文件内容
form表单里面要添加一个特殊的参数 enctype="multipart/form-data" #文件的传输配置
1.创建一个html文件用于上传文件
选择之前的b页面进行操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
博客主页面,可以不登录
<form 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>
</form>
</body>
</html>
在blog_user/urls.py下修改b函数
def b(request):
if request.method=='GET':
return render(request, 'user/b.html', {})
elif request.method=='POST':
#获取上传的文件
myfile=request.FILES.get('myfile')
#配置存放路径为files
path=os.path.join('files',myfile.name)
#打开
upfile=open(path,'wb+')
#循环myfile里面包含用户上传的文件
for row in myfile:
upfile.write(row)
#关闭
upfile.close()
return HttpResponse('上传成功')
(wb+:是为读写建立一个新的二进制文件
rb+:是为读写打开一个二进制文件)
在exercise项目下创建模块files要接收上传的内容
2.富文本
<1>下载富文本编辑器
下载链接:
http://ueditor.baidu.com/website/download.html#ueditor
<2>将下载的文件,全部存放在exercise项目里面static下的ueditor文件夹中
<3>在ueditor里面找到_examples文件夹里面有一个名为index.html的文件我们在网页里面打开,找一个自己想要的类型的富文本编辑器
接着查看源代码,也可以打开这个页面的html,我们需要的是里面的代码:
打开源代码将其中的script代码拿出来放入b.html页面并进行路径修改
然后将其中的form代码放入b.html
进入editor_api.js代码页修改路径
<4>在blog下导入文件
修改b.html路径
<5>配置路径blog/urls
将config.json复制到跟目录 达到以下效果
将文件files 放入static下
更改路径
最终效果