博客功能更新及细节优化

类视图的CSRF验证

为了防止跨域攻击,Django引入了CSRF验证,凡是POST请求,都需要验证通过后才能与服务器交互。CSRF验证需要前后端共同实现。

前端添加CSRF验证仅需要在<form></form>标签内添加{% csrf_token %}即可。在返回网页时,Django会自动将其替换成value="csrf信息"的input标签。

后端分两种情况,一种为url引用的方法,另一种为url引用的类试图如Example.as_view( )。这两种情况引入CSRF验证的方法也不一样。

对于方法,仅需要在方法前添加装饰器:@csrf_exempt即可,例如:

@csrf_exempt
def example(request):
	"""方法实现"""
	return xxx

对于类视图,则需要使用csrf_exempt(Example.as_view( ))将其包裹例如:

urlpatterns = [
    path('example/', csrf_exempt(views.Example.as_view()), name='example'),  # 路由
]

阿里云服务器发送邮件

在配置博客的时候,在这里踩了一个坑。阿里云服务器屏蔽了25端口,所以所有配置成25端口的SMTP邮箱都会出现响应超时的情况,最后把它改成465端口才解决这个问题。

文章的自动保存

文章自动保存功能以上线,每1min文章就会自动保存一次。

为了实现文章自动保存的功能,我将原先的create方法和update方法合并在了一起,形成了operations方法。

原代码在新建文章时,所有的数据都保存在前端,只有前端发出POST请求时,才new article进行存储。现在新建文章时,会先new一个article对象,再进行后续的操作。因此,网页模板从原先的create.html和update.html变成了现在仅有一个update.html。新的article对象保存和发布使用的同一个方法,通过传入is_save参数判断是需要保存,还是需要发布。未发布的文章,通过is_show判断其是否该显示在列表。

不知道是因为jq的bug还是什么原因,Ajax发送请求时,只要发送了经过.replace( )处理了的数据,前端就会报错。因此也只能将标签多分隔符的功能给转到后端去了。

小BUG:因在article.modle中设置了title、body不可为空,所以在title或body其中一个为空时,文章无法正确保存。后续会对其进行修改,同时也会涉及到后续提交文章时对title、body的判断。(已于文章发布当晚处理完成。设置title、body可为空,改为在发布时检查是否为空,为空则不允许发布)

文章及评论显示头像

在文章及评论中添加了头像显示,具体实现非常简单,就不过多赘述。此外,还有个人信息卡没有合理的利用起来,后续考虑增加相关功能。

在实现这个功能时,我顺带更改了头像上传后的处理方式。原先头像上传后会将其短边缩放成60px,考虑到头像只使用方形,故此现在的处理逻辑,时将图片缩放后,从中间截取60x60的正方形。便于数据的轻量化,加快网页的加载。

此外,考虑到个人博客人流量较小(有一部分我禁止了未登录访问的原因),我将个人头像的文件名固定,每当上传新头像时,旧头像就会被删除,降低了服务器的空间占用,也方便检索个人头像。

ckeditor工具栏更改

事实证明,我昨天的想法是非常可行的,通过js的.after( )方法,我将保存和发布按钮添加到了文章的工具栏上,同时保存按钮兼具了保存状态的显示。

我以前是比较抗拒js的学习的,通过这几天使用js编辑前端界面、发送ajax请求等,我觉得我大概是了解js脚本的写法了。js代码整体和Java差不了多少,只是面向的对象不一样,一些方法始终是有些不同。

快捷键的添加

监听用户的键盘输入就可以实现快捷键功能,代码模板如下:

$(window).keydown(function(e) {  // 此处使用Jquery选择器
        if (e.keyCode === 83 && e.ctrlKey) {  // 根据按键ASCII码判断用户按下的案件
            e.preventDefault();  // 禁止浏览器响应快捷键(浏览器会响应Ctrl+S保存HTML文件)
            saveArticle();  // 检测到快捷键被按下后的方法
        }
    });

结合前边修改ckeditor工具栏的内容,在元素中添加属性data-cke-tooltip-text="保存(Ctrl+S)"即可在鼠标悬浮在按钮上时进行提示(此处使用ckeditor自有功能)。

最后附上键盘按键对应的ASCII 编码:

功能键

A~Z

常数

描述 

常数

描述 

vbKeyLButton

0x1

鼠标左键 

vbKeyA

65

A 键 

vbKeyRButton

0x2

鼠标右键 

vbKeyB

66

B 键 

vbKeyCancel

0x3

CANCEL 键 

vbKeyC

67

C 键 

vbKeyMButton

0x4

鼠标中键 

vbKeyD

68

D 键 

vbKeyBack

0x8

BACKSPACE 键 

vbKeyE

69

E 键 

vbKeyTab

0x9

TAB 键 

vbKeyF

70

F 键 

vbKeyClear

0xC

CLEAR 键 

vbKeyG

71

G 键 

vbKeyReturn

0xD

ENTER 键 

vbKeyH

72

H 键 

vbKeyShift

0x10

SHIFT 键 

vbKeyI

73

I 键 

vbKeyControl

0x11

CTRL 键 

vbKeyJ

74

J 键 

vbKeyMenu

0x12

MENU 键 

vbKeyK

75

K 键 

vbKeyPause

0x13

PAUSE 键 

vbKeyL

76

L 键 

vbKeyCapital

0x14

CAPS LOCK 键 

vbKeyM

77

M 键 

vbKeyEscape

0x1B

ESC 键 

vbKeyN

78

N 键 

vbKeySpace

0x20

SPACEBAR 键 

vbKeyO

79

O 键 

vbKeyPageUp

0x21

PAGE UP 键 

vbKeyP

80

P 键 

vbKeyPageDown

0x22

PAGE DOWN 键 

vbKeyQ

81

Q 键 

vbKeyEnd

0x23

END 键 

vbKeyR

82

R 键 

vbKeyHome

0x24

HOME 键 

vbKeyS

83

S 键 

vbKeyLeft

0x25

LEFT ARROW 键 

vbKeyT

84

T 键 

vbKeyUp

0x26

UP ARROW 键 

vbKeyU

85

U 键 

vbKeyRight

0x27

RIGHT ARROW 键 

vbKeyV

86

V 键 

vbKeyDown

0x28

DOWN ARROW 键 

vbKeyW

87

W 键 

vbKeySelect

0x29

SELECT 键 

vbKeyX

88

X 键 

vbKeyPrint

0x2A

PRINT SCREEN 键 

vbKeyY

89

Y 键 

vbKeyExecute

0x2B

EXECUTE 键 

vbKeyZ

90

Z 键

vbKeySnapshot

0x2C

SNAPSHOT 键 

下列常数代表数字键盘上的键:

vbKeyInsert

0x2D

INSERT 键 

常数

描述  

vbKeyDelete

0x2E

DELETE 键 

vbKeyNumpad0

0x60

0 键 

vbKeyHelp

0x2F

HELP 键 

vbKeyNumpad1

0x61

1 键 

vbKeyNumlock

0x90

NUM LOCK 键

vbKeyNumpad2

0x62

2 键 

下列常数代表功能键:

vbKeyNumpad3

0x63

3 键 

常数

描述   

vbKeyNumpad4

0x64

4 键 

vbKeyF1

0x70

F1 键  

vbKeyNumpad5

0x65

5 键 

vbKeyF2

0x71

F2 键  

vbKeyNumpad6

0x66

6 键 

vbKeyF3

0x72

F3 键  

vbKeyNumpad7

0x67

7 键 

vbKeyF4

0x73

F4 键  

vbKeyNumpad8

0x68

8 键 

vbKeyF5

0x74

F5 键  

vbKeyNumpad9

0x69

9 键 

vbKeyF6

0x75

F6 键  

vbKeyMultiply

0x6A

MULTIPLICATION SIGN (*) 键 

vbKeyF7

0x76

F7 键  

vbKeyAdd

0x6B

PLUS SIGN (+) 键 

vbKeyF8

0x77

F8 键  

vbKeySeparator

0x6C

ENTER 键  

vbKeyF9

0x78

F9 键  

vbKeySubtract

0x6D

MINUS SIGN (-) 键 

vbKeyF10

0x79

F10 键  

vbKeyDecimal

0x6E

DECIMAL POINT (.) 键 

vbKeyF11

0x7A

F11 键  

vbKeyDivide

0x6F

DIVISION SIGN (/) 键

vbKeyF12

0x7B

F12 键  

vbKey1

49

1 键 

vbKeyF13

0x7C

F13 键  

vbKey2

50

2 键 

vbKeyF14

0x7D

F14 键  

vbKey3

51

3 键 

vbKeyF15

0x7E

F15 键  

vbKey4

52

4 键 

vbKeyF16

0x7F

F16 键 

vbKey5

53

5 键 

0~9键

vbKey6

54

6 键 

常数

描述 

vbKey7

55

7 键 

vbKey0

48

0 键 

vbKey8

56

8 键 

   

vbKey9

57

9 键

 



登录后回复

共有0条评论

目 录