返回顶部

纯手撸 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>

 

 

 

测试运行访问

 
#一个 HTTP GET 请求,路径为 /myweb1/delete/,参数为 key=my_key1,验证确实删除了redis的key,此方法可用于CICD的接口操作做一下操作不仅限于redis

http://localhost:8080/myweb1/delete/?key=my_key1

 

 

 

报错 “Server Error (500)”

 

日志为:

[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的操作后续继续研究其他有用的功能。

 

posted @ 2023-07-25 00:10  九尾cat  阅读(36)  评论(0编辑  收藏  举报