纯手撸 Django web框架增删改redis
纯手撸 Django web框架增删改redis
基于上面创建的Django web应用创建CI所需的接口,进行删除key操作
环境创建
基于前两章已创建的环境进行功能接口的添加。
创建新应用
在 Django 中,一个项目可以包含多个应用。每个应用都有自己的模型、视图、模板等组件,可以独立地开发和测试。
cd mysite
#上述环境已经创建一个应用myweb,在创建一个myweb1
python manage.py startapp myweb1
添加app应用
### mysite/mysite/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'bootstrap4', 'myweb', 'myweb1', ]
配置路由映射
配置应用的路由,可以在每个应用中创建一个名为 urls.py 的文件,然后在项目的 urls.py 文件中引入它们
在这个配置中,我们将 myapp1 和 myapp2 的路由分别定义在它们自己的 urls.py 文件中,然后在项目的 urls.py 文件中引入它们。这样,当用户访问 /myapp1/ 或者 /myapp2/ 时,Django 就会根据路由配置找到对应的视图函数,并将请求传递给它们。
#### myweb/urls.py from django.urls import path from . import views app_name = 'myweb' urlpatterns = [ path('', views.index, name='index'), #'',在localhost:8080/myweb后面不在添加path,需要时可在添加等同于localhost:8080/myweb/xxx # path('about/', views.about, name='about'), ] #### myweb1/urls.py from django.urls import path from . import views app_name = 'myweb1' urlpatterns = [ path('', views.home, name='home'), # path('contact/', views.contact, name='contact'), ] #### mysite/urls.py from django.contrib import admin from django.urls import path from django.urls import include urlpatterns = [ path('admin/', admin.site.urls), path('myweb/', include('myweb.urls')), path('myweb1/', include('myweb1.urls')), ]
多应用创建注意事项
注意事项:
- 在创建多个应用时,需要注意不同应用之间的命名空间。例如,在给视图函数命名时,最好使用 myapp1:index 和 myapp2:home 这样的格式来表示不同应用的视图函数。
- 在配置路由时,需要注意不同应用之间的 URL 路径是否冲突。如果两个应用都使用了相同的 URL 路径,那么可能会导致路由冲突。因此,在设计路由时需要避免这种情况的发生。
- 在开发和测试应用时,最好使用虚拟环境来管理依赖和环境。这样可以避免不同应用之间的依赖冲突,并且方便在不同环境中部署应用。
创建视图及配置redis
使用 redis-py 客户端库连接到密码保护的 Redis 服务器
# Create your views here. from django.shortcuts import render import redis def delete_redis_key(request): # 连接 Redis r = redis.Redis(host='localhost', port=6379, db=0, password='123456') # 获取要删除的 Redis key key = request.GET.get('key', '') # 删除 Redis key r.delete(key) # 返回结果页面,渲染模版文件 context = {'deleted': True} return render(request, 'result.html', context)
配置模板
#创建Python package 目录template,在目录下创建 result.html,内容如下 <!DOCTYPE html> <html> <head> <title>Delete Result</title> </head> <body> <h1>Delete Result</h1> {% if deleted %} <p>Redis key has been successfully deleted.</p> {% else %} <p>Failed to delete Redis key.</p> {% endif %} </body> </html>
测试运行访问
日志为:
[24/Jul/2023 23:14:42] "GET /myweb1/delete/?key=my_key1 HTTP/1.1" 500 145
[24/Jul/2023 23:14:57] "GET /myweb1/delete/?key=my_key1 HTTP/1.1" 500 145
分析:
500一般为服务端错误,先检查代码服务的问题。若出现404则表示访问不到资源,就需要按照url、视图、配置和日志进行排查
错误日志显示了一个 HTTP GET 请求,路径为 /myweb1/delete/,参数为 key=my_key1,返回的状态码为 500。这个错误通常是由于服务器端代码出现了错误,或者服务器端配置不正确导致的。先检查一下视图函数、模板文件以及相关配置,找出问题所在。如果无法解决问题,可以尝试查看 Django 的错误日志,或者在浏览器开发者工具中查看请求返回的状态码和错误信息。
解决方法
#排查分析后发现为未添加app应用,mysite/mysite/settings.py 未添加新创建的应用导致找不到报错,程序执行了删除key的操作 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'bootstrap4', 'myweb', 'myweb1', ]
小白建议:
建议如果是入门的话,可以先创建单独的项目应用跑通理解之后,再继续在一个项目中创建多个应用进行“拼装功能”,这样出现问题方便问题的排查和理清思路。在创建这个项目多应用也是遇到了很多问题,比如数据库连接、404、500、缺少模块等等,一步一个坑爬出来在此给后来者一些我觉得有用的信息。需要项目demon可联系作者进行入门研究,将简单功能发挥更大的作用。我的初衷就是为实现自动化运维操作,通过接口去删除每次服务上线的一些用户key的操作后续继续研究其他有用的功能。