您的位置:58编程 > django api Django4.0 初级API

django api Django4.0 初级API

2023-03-22 22:33 Django4中文教程

django api Django4.0 初级API

django api

Django API 是一种用于构建 Web 应用程序的 Python 框架。它是一个开源项目,可以帮助开发人员快速构建功能丰富的 Web 应用程序。它使用 Model-View-Controller (MVC) 架构,允许开发人员将应用程序的不同部分分离,以便更容易地进行开发、测试和部署。

Django API 使用 Python 语言来构建 Web 应用程序,并且具有许多内置功能,如数据库访问、URL 路由、会话和中间件处理。它还包含了一个内置的 Web 服务器,可以帮助开发人员快速部署应用程序。此外,Django API 还包含了一个内置的测试框架,可以帮助开发人员测试代码并保证代码质量。

import django 
from django.conf import settings 
from django.urls import path 
from .views import index 
 
urlpatterns = [ 
    path('', index, name='index'), 
] 

Django4.0 初级API

现在让我们进入交互式 Python 命令行,尝试一下 Django 为你创建的各种 API。通过以下命令打开 Python 命令行:

...> py manage.py shell

我们使用这个命令而不是简单的使用“python”是因为 ​manage.py​ 会设置 ​DJANGO_SETTINGS_MODULE​ 环境变量,这个变量会让 Django 根据 ​mysite/settings.py​ 文件来设置 Python 包的导入路径。
当你成功进入命令行后,来试试 数据库 API 吧:

>>> from polls.models import Choice, Question  # Import the model classes we just wrote.

# No questions are in the system yet.
>>> Question.objects.all()
<QuerySet []>

# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What"s new?", pub_date=timezone.now())

# Save the object into the database. You have to call save() explicitly.
>>> q.save()

# Now it has an ID.
>>> q.id
1

# Access model field values via Python attributes.
>>> q.question_text
"What"s new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)

# Change values by changing the attributes, then calling save().
>>> q.question_text = "What"s up?"
>>> q.save()

# objects.all() displays all the questions in the database.
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

<Question: Question object (1)>​ 对于我们了解这个对象的细节没什么帮助。让我们通过编辑 ​Question模型的代码(位于 ​polls/models.py​ 中)来修复这个问题。给 ​Question和 ​Choice增加 ​__str__()​ 方法。

from django.db import models

class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

给模型增加 ​__str__()​ 方法是很重要的,这不仅仅能给你在命令行里使用带来方便,Django 自动生成的 admin 里也使用这个方法来表示对象。
让我们再为此模型添加一个自定义方法:

import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

新加入的 ​import datetime​ 和 ​from django.utils import timezone​ 分别导入了 Python 的标准 ​datetime模块和 Django 中和时区相关的 ​django.utils.timezone​ 工具模块。

保存文件然后通过 ​python manage.py shell​ 命令再次打开 Python 交互式命令行:

>>> from polls.models import Choice, Question

# Make sure our __str__() addition worked.
>>> Question.objects.all()
<QuerySet [<Question: What"s up?>]>

# Django provides a rich database lookup API that"s entirely driven by
# keyword arguments.
>>> Question.objects.filter(id=1)
<QuerySet [<Question: What"s up?>]>
>>> Question.objects.filter(question_text__startswith="What")
<QuerySet [<Question: What"s up?>]>

# Get the question that was published this year.
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: What"s up?>

# Request an ID that doesn"t exist, this will raise an exception.
>>> Question.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Question matching query does not exist.

# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to Question.objects.get(id=1).
>>> Question.objects.get(pk=1)
<Question: What"s up?>

# Make sure our custom method worked.
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True

# Give the Question a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a question"s choice) which can be accessed via the API.
>>> q = Question.objects.get(pk=1)

# Display any choices from the related object set -- none so far.
>>> q.choice_set.all()
<QuerySet []>

# Create three choices.
>>> q.choice_set.create(choice_text="Not much", votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text="The sky", votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text="Just hacking again", votes=0)

# Choice objects have API access to their related Question objects.
>>> c.question
<Question: What"s up?>

# And vice versa: Question objects get access to Choice objects.
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
3

# The API automatically follows relationships as far as you need.
# Use double underscores to separate relationships.
# This works as many levels deep as you want; there"s no limit.
# Find all Choices for any question whose pub_date is in this year
# (reusing the "current_year" variable we created above).
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>

# Let"s delete one of the choices. Use delete() for that.
>>> c = q.choice_set.filter(choice_text__startswith="Just hacking")
>>> c.delete()


阅读全文
以上是58编程为你收集整理的django api Django4.0 初级API全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58编程 58biancheng.com 版权所有 联系我们
桂ICP备12005667号-32 Powered by CMS