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'), ]
现在让我们进入交互式 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()
要比较两个模型实例,使用标准的 Python 比较操作符,两个等号: ==。实际上,这比较了两个模型实例的主键值。使用上文的 ...
Web 服务Web 服务是一个基于网络的功能,可被 web 应用通过 web 网络协议获取。web 服务开发主要包含以下三方面:创建 web 服务...
WebSecurity - ResetPassword()WebSecurity 对象定义 ResetPassword() 方法使用密码令牌重置用户密码。C# 和 VB 语法W...
ASP.NET TextBox Rows 属性 TextBox 控件定义和用法 Rows 属性用于设置或返回 TextBox 控件的高度。 该属性仅在 TextMode="Multi...
ASP.NET RadioButtonList CellPadding 属性 RadioButtonList 控件定义和用法 CellPadding 属性用于设置或返回单元格边框与内容之...
ASP.NET ListItem Text 属性 ListItem 控件定义和用法 Text 属性用于设置或返回 ListItem 控件的文本。 语法asp:ListItem Text="...
ASP.NET ValidationSummary 控件 Validation 服务器控件定义和用法 ValidationSummary 控件用于显示网页中所有验证错误的摘要。...