Django配置api、管理系统和视图

简介: Django配置api、管理系统和视图

一、django的api

进入上一篇我们生成好的testsite项目执行下面命令

py manage.py shell

进入交互式 Python 命令行,可以使用 django 丰富的api

可以看到你的 PythonIPython 版本信息,

他的作用主要是对数据库模型的的增删改查,方便我们调试.

举个应用增加查询例子:

# 导入
from polls.models import Choice, Question
#查询
Question.objects.all()
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
# 保存
>>> q.save()
# 查看id
>>> q.id

image.png

二、django的管理界面

首先先创建一个管理员账号:

py manage.py createsuperuser

然后依次输入你的用户名,邮箱,密码。

启动 django 服务。

py manage.py runserver

访问 http://127.0.0.1:8000/admin/ 这个地址就可以进入django的管理界面。后面这个端口根据你启动命令监听端口来。 image.png image.png

界面上的你groupuser。它们是由django.contrib.auth提供的,这是 Django 开发的认证框架。

我们怎么向管理界面加入一个应用呢?

进入我们前面创建好的的 members 应用,打开 admin.py 文件。加入下面 model 注册代码。

from django.contrib import admin
from .models import Question
admin.site.register(Question)


我们便注册好了 question 类。在我们刚刚打开的管理界面,就看到了注册好的question应用。 我们就可以对它进行一系列curd。 在这里插入图片描述 image.png image.png

三、django的视图

Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。

我们为了向 members 应用添加更多视图,进入 members/views.py


def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)
def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)
def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)


为了使这些视图他们能访问,就要把它们添加进入urls模块里面。打开 members/urls.py

from django.urls import path
from . import views
urlpatterns = [
    # ex: /members/
    path('', views.index, name='index'),
    # ex: /members/5/
    path('<int:question_id>/', views.detail, name='detail'),
    # ex: /members/5/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /members/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

其实就是添加能访问视图的路由。然后进入我们的后台页面,加入我们想看 members 详情,

根据你写的路由进行访问即可,比如我要访问 detail 详情视图,根据路由访问http://127.0.0.1:8000/members/1,就能进入详情视图啦!

image.png

当然这只是举例子,实际项目中每个视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse 对象,或者抛出一个异常,比如 Http404

视图里面除了可以从数据库里读取记录,还可以使用任何你想用的 Python 库。

Django只需要返回的是一个HttpResponse,或者抛出一个异常就可以。

下面举个例子视图里面执行数据库查询,

from django.http import HttpResponse
from .models import Question
def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    output = ', '.join([q.question_text for q in latest_question_list])
    return HttpResponse(output)

进入members 目录创建一个模板目录 templatesDjango 将会在这个目录里查找模板文件。

然后在你刚刚创建的 templates 目录里,再创建一个目录 members,然后在其中新建一个文件index.html  。

这时候你的模板文件的路径应该是 members/templates/members/index.html

因为app_directories 模板加载器是通过上述描述的方法运行的,所以 Django可以引用到 members/index.html 这一模板了。

然后打开 members/templates/members/index.html

添加下面模板代码:

{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/members/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No members are available.</p>
{% endif %}


然后,让我们更新一下members/views.py里的 index方法视图来使用模板:

from django.http import HttpResponse
from django.template import loader
from .models import Question
def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('members/index.html')
    context = {
        'latest_question_list': latest_question_list,
    }
    return HttpResponse(template.render(context, request))


这一步的目的是载入 members/index.html 模板文件,并且向它传递一个上下文(context)

然后访问 http://127.0.0.1:8000/members/ 就可以看到我们向 question 视图数据里面插入的数据被查询出来的。

image.png

我们也可以使用下面方法查询视图,使用 render() 方法:

from django.shortcuts import render
from .models import Question
def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'members/index.html', context)

再举个抛出错误的例子

from django.http import Http404
from django.shortcuts import render
from .models import Question
# ...
def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("Question does not exist")
    return render(request, 'members/detail.html', {'question': question})

访问我们的地址 http://127.0.0.1:8000/members/2/ 就可以看到出异常效果了,选一个数据库里面没有的数据。 image.png

也可以使用快捷函数 get_object_or_404() 达到同样的效果。

from django.shortcuts import get_object_or_404, render
from .models import Question
# ...
def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'members/detail.html', {'question': question})


image.png

怎么去除模板中的硬编码 URL

我们在 members/index.html 里面代码是这样:

<li>
  <a href="/members/{{ question.id }}/">
    {{ question.question_text }}
  </a>
</li>


为了方便修改,你可以使用{% url %}标签代替它:

<li>
  <a href="{% url 'detail' question.id %}">
    {{ question.question_text }}
  </a>
</li>


修改 members/urls 路由 detail

path('<int:question_id>/', views.detail, name='detail'),

如果想改变详情视图的 URL ,比如想改成 members/specifics/12/ ,只要在 members/urls.py 里稍微修改一下就行:

path('specifics/<int:question_id>/', views.detail, name='detail'),

即可。

还可以在 members/urls.py里面设置命名空间

from django.urls import path
from . import views
app_name = 'members'
urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    path('<int:question_id>/results/', views.results, name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

四、总结

经过上面例子可以看到 django 给我们提供了非常方便的视图,路由,和后台模块,通过这些我们能够灵活去搭建和配置我们的项目,解决实际我们遇到的各色各样的系统开发。

特别是对于数据模型的友好支持,让开发人员的注意力更多放在设计和业务需求上面,django 良好的设计减少我们的代码开发复杂度。

对于 django 的视图路由系统,我们能很清晰的找到他们的映射关系,并且它本身也具有很多优点:比如添加命名空间,正则表达式匹配,各个应用之间分层导入,还包括错误处理等等,都值得我们进一步去学习和使用。


相关文章
|
3月前
|
JSON 监控 供应链
京东商品详情API参数构造指南:必填参数与自定义字段配置
京东商品详情API由京东开放平台提供,支持获取商品基础信息、价格库存、SKU规格等120+字段,适用于价格监控、库存管理等场景。接口采用HTTPS协议、JSON格式,数据延迟≤30秒,支持高并发。提供Python请求示例,便于快速接入。
|
5月前
|
运维 数据可视化 测试技术
从混乱到清晰:API开发追踪工具实用技巧与工具配置完整拆解
API开发追踪工具是提升团队协作效率、实现接口全流程管理的关键。它整合任务看板、文档同步、版本控制与多角色协作,助力前后端及第三方高效对接。本文详解其核心功能、选型建议与落地实践,助你打造透明、规范的API协作体系。
|
6月前
|
数据采集 机器学习/深度学习 搜索推荐
利用通义大模型构建个性化推荐系统——从数据预处理到实时API部署
本文详细介绍了基于通义大模型构建个性化推荐系统的全流程,涵盖数据预处理、模型微调、实时部署及效果优化。通过采用Qwen-72B结合LoRA技术,实现电商场景下CTR提升58%,GMV增长12.7%。文章分析了特征工程、多任务学习和性能调优的关键步骤,并探讨内存优化与蒸馏实践。最后总结了大模型在推荐系统中的适用场景与局限性,提出未来向MoE架构和因果推断方向演进的建议。
1039 11
|
6月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
270 1
|
5月前
|
JSON 搜索推荐 算法
利用API提升电商用户体验:个性化推荐系统
在电商竞争激烈的当下,个性化推荐系统成为提升用户粘性与转化率的关键。本文详解如何通过API集成高效接入先进推荐算法,实现实时精准推荐,优化用户体验,提升业务增长。
231 0
|
3月前
|
算法 API 数据库
生鲜电商技术实践:基于保质期API的自动下架系统保障食品安全
基于保质期提醒API与自动化工作流,实现生鲜商品临期智能预警与自动下架。通过设定差异化预警阈值(如蔬菜2天、冷冻品7天),每日扫描数据库并触发下架指令,确保食品安全合规,降低损耗与客诉,提升运营效率。
276 0
|
4月前
|
监控 安全 API
京东 API 接口:打造高效京东店铺订单处理系统
在电商竞争激烈的环境下,京东店铺需提升订单处理效率以优化用户体验与收益。本文介绍如何利用京东开放平台的API接口,构建高效订单处理系统,涵盖订单查询、库存同步、物流跟踪等功能,助力商家实现自动化管理,显著提升运营效率与客户满意度。
259 0
|
5月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
272 1
|
5月前
|
Java 分布式数据库 Docker
使用Docker配置并连接HBase的Java API
本流程概要的解释了如何在Docker上配置并启动HBase服务,并通过Java API进行连接和操作表,不涉及具体的业务逻辑处理和数据模型设计,这些因应用而异需由开发者根据实际需求进行实现。
264 13
|
4月前
|
机器学习/深度学习 人工智能 供应链
淘宝API智能补货系统:库存周转率提升50%的奥秘
在电商竞争激烈的当下,库存管理效率决定企业成败。淘宝API智能补货系统融合人工智能与淘宝开放接口,实现库存自动化管理,大幅提升库存周转率,降低运营成本,助力企业实现高效、智能、精益的供应链管理。
316 0