新闻项目-渲染主页及图形验证码

一丶渲染主页

将前端代码放入info目录下

 在index中的views渲染主页

1 from . import blue_index
2 from flask import render_template
3 
4 @blue_index.route('/') 
5 def hello_world():
6     return render_template("index/index.html")

1)渲染左侧小图标

1 from flask import current_app
2 
3 @blue_index.route("/favicon.ico")
4 def favicon():
5     return current_app.send_static_file("news/favicon.ico")

二丶图形验证码

在modules中创建一个新的文件夹名叫passport

在passport文件夹中创建名称叫views的pthon文件

 完成蓝图的基本配置

__init__中:

1 from flask import Blueprint
2 
3 blue_passport = Blueprint("passport",__name__,url_prefix="/passport")
4 
5 from . import views

views中:

1 from . import blue_passport
2 
3 @blue_passport.route("/image_code")
4 def image_code(): 
5   pass

manage中:

1 from info.modules.passport import blue_passport
2 
3 app.register_blueprint(blue_passport)

前端逻辑处理

找到前端中的图形验证码,将src中的测试图片删除

ctrt加左键点击generateImageCode()进入js代码

 补全generateImageCode()的js代码

1 // TODO 生成一个图片验证码的编号,并设置页面中图片验证码img标签的src属性
2 function generateImageCode() {
3     // 生成uuid
4     imageCodeId = generateUUID();
5     // url:必须要能访问到image_code视图
6     var url = '/passport/image_code?imageCodeId='+imageCodeId;
7     // 将url赋值给img标签的src属性,只要src属性给赋值一个url,会立即向该url发送请求
8     $('.get_pic_code').attr('src', url);
9 }

在视图函数中打印测试是否配置成功

1 from flask import request
2 
3 print(request.url)

后端逻辑处理

在info中创建一个utils文件夹,并utils文件夹中创建captcha

在captcha中导入生成图形验证码的代码

sr设置全局变量

在全局变量中设置为None,在用global将sr设置为全局变量赋值

逻辑思路

相关代码:

 1 from . import blue_passport
 2 from flask import request,abort,make_response
 3 from info.utils.captcha.captcha import captcha
 4 from info import sr,constants
 5 @blue_passport.route("/image_code")
 6 def image_code():
 7     # 1.接受参数(uuid)
 8     imageCodeUUID = request.args.get("imageCodeId")
 9     # 2.校验参数(判断uuid是否为空)
10     if not imageCodeUUID:
11         return abort(403)
12     # 3.生成图片验证码
13     name,imageCodeText,imageCodeIMAGE = captcha.generate_captcha()
14     # 4.保存图片验证码到redis
15     try:
16         sr.set("imageCode:"+imageCodeUUID,imageCodeText,ex=constants.IMAGE_CODE_REDIS_EXPIRES)
17     except:
18         return abort(500)
19     # 5.修改image的ContentType = 'image/jpg'
20     response = make_response(imageCodeIMAGE)
21     response.headers["Content-Type"] = 'image/jpg'
22     # 6.响应图片验证码
23     return response

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-06-20 20:45  yoo丿  阅读(52)  评论(0)    收藏  举报