django官方教程(1,2)

版本: 1.x和2.x, 2.x不支持python2版本,只支持py3.5及以上版本。1.x路由正则风格 2.x路由风格简单类似flask。

优点:大而全,封装多种功能,开启即用,目录结构适合中大型程序。
缺点:内含的功能有些用不上

官方教程:投票应用

第1节:请求和响应| 第2节:模型和admin站点

  1. 确认python版本和django版本已安装。
    python -m django --version
  2. 新建项目
    django-admin startproject mysite
    当前目录下创建一个mysite目录。
  • 根目录下manage.py启动服务的入口。一个让你用各种方式管理 Django 项目的命令行工具。一个跟项目同名的mysite文件夹下是主要项目代码。有的项目中这个文件夹又叫做app、src。 settings.py设置。urls.py路由。wsgi.py打包应用部署相关。 models.pyORM相关的类。
    views.py业务逻辑。
  • mysite/settings.py:Django 项目的配置文件。
  • mysite/urls.py:Django 项目的 URL 声明,就像你网站的“目录”
  • mysite/wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。
  1. \mysite>python manage.py runserver 切换目录 启动项目/开发者服务器
    ctrl +C 服务停止

  2. 如果需要可以更换端口
    \mysite>python manage.py runserver 8080 指定端口号
    > python manage.py runserver 0:8000 -----0 是 0.0.0.0 的简写。

  3. 重新开一个终端 生成项目 创建投票应用 python manage.py startapp polls。 project是项目工程,app应用是项目中的一个功能模块。polls目录下的migrations是sql迁移脚本,admin.py后台插件,app.py,models.py定义表结构的类,tests.py单元测试,views.py业务逻辑和HTML渲染。

流程

浏览器请求url→mysite/urls.py→ polls.urls.py→ polls/views.py→ 返回响应浏览器展示

报错

  1. 安装django时报目录权限错误。解决使用管理员powershell pip 安装。
  2. 代码修改后未生效,服务器无log,原因进程未正常退出。解决 改端口或任务管理器中结束所有python.exe
    3.getaddress函数报错。原因,计算机别名为中文

编写第一个视图

polls/views.py

from django.http import HttpResponse

def index(request):
return HttpResponse("Hello, world. You're at the polls index")

请在 polls 目录里新建一个 urls.py 文件

polls/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

下一步是要在根 URLconf 文件中指定我们创建的 polls.urls 模块。在 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:

mysite/url.py

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

函数 include() 允许引用其它 URLconfs。我们设计 include() 的理念是使其可以即插即用。因为投票应用有它自己的 URLconf( polls/urls.py ),他们能够被放在 “/polls/” , “/fun_polls/” ,"/content/polls/",或者其他任何路径下,这个应用都能够正常工作。
当包括其它 URL 模式时你应该总是使用 include() , admin.site.urls 是唯一例外。
你现在把 index 视图添加进了 URLconf。可以验证是否正常工作,运行下面的命令:

python manage.py runserver

用你的浏览器访问 http://localhost:8000/polls/,你应该能够看见 “Hello, world. You’re at the polls index.” ,这是你在 index 视图中定义的。

数据库配置

编辑 mysite/settings.py 文件前,先设置 TIME_ZONE 为你自己时区。
此外,关注一下文件头部的 INSTALLED_APPS 设置项。这里包括了会在你项目中启用的所有 Django 应用。应用能在多个项目中使用,你也可以打包并且发布应用,让别人使用它们。
通常, INSTALLED_APPS 默认包括了以下 Django 的自带应用:

  • django.contrib.admin – 管理员站点, 你很快就会使用它。
  • django.contrib.auth – 认证授权系统。
  • django.contrib.contenttypes – 内容类型框架。
  • django.contrib.sessions – 会话框架。
  • django.contrib.messages – 消息框架。
  • django.contrib.staticfiles – 管理静态文件的框架。
    这些应用被默认启用是为了给常规项目提供方便。

默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表。请执行以下命令:

python manage.py migrate

创建模型

polls/models.py

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

每个字段都是 Field 类的实例 - 比如,
字符字段被表示为 CharField ,
日期时间字段被表示为 DateTimeField 。
定义某些 Field 类实例需要参数。例如 CharField 需要一个 max_length 参数。
Field 也能够接收多个可选参数;在上面的例子中:我们将 votes 的 default 也就是默认值,设为0
注意在最后,我们使用 ForeignKey 定义了一个关系。这将告诉 Django,每个 Choice 对象都关联到一个 Question 对象。Django 支持所有常用的数据库关系:多对一、多对多和一对一。

激活模型

为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS 中添加设置。因为 PollsConfig 类写在文件 polls/apps.py 中,所以它的点式路径是 ‘polls.apps.PollsConfig’。在文件 mysite/settings.py 中 INSTALLED_APPS 子项添加点式路径后,它看起来像这样:

mysite/settings.py

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

现在你的 Django 项目会包含 polls 应用。接着运行下面的命令:

python manage.py makemigrations polls

首先,让我们看看迁移命令会执行哪些 SQL 语句。sqlmigrate 命令接收一个迁移的名称,然后返回对应的 SQL:

python manage.py sqlmigrate polls 0001

现在,再次运行 migrate 命令,在数据库里创建新定义的模型的数据表:

python manage.py imgrate

现在,你只需要记住,改变模型需要这三步:

  • 编辑 models.py 文件,改变模型。
  • 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
  • 运行 python manage.py migrate 来应用数据库迁移

初试API

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

python manage.py shell

当你成功进入命令行后,来试试 database API 吧:

from polls.models import Choice, Question
Question.objects.all()
from django.utils import timezone
q = Question(question_text=“What’re new?”, pub_date=timezone.now())
q.save()
q.id
q.pub_date
q.question_text=“What’s up?”
q.save()
Question.objects.all()

polls/models.py

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 里也使用这个方法来表示对象。

注意:这些都是常规的 Python方法。让我们添加一个自定义的方法,这只是为了演示:

polls/models.py

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
Question.objects.all()
Question.objects.fliter(id=1)
Question.objects.filter(question_text__startswith=“What”)

from django.utils import timezone
current_year = timezone.now().year
Question.objects.get(pub_date__year=current_year)

Question.objects.get(pk=1)
q = Question.objects.get(pk=1)
q.was_published_recently()

q = Question.objects.get(pk=1)
q.choice_set.all()
q.choice_set.create(choice_text=‘Not much’, votes=0)
q.choice_set.create(choice_text=‘The sky’, votes=0)
c = q.choice_set.create(choice_text=‘Just hacking again’, votes=0)
c.question
q.choice_set.all()
q.choice_set.count()

Choice.objects.filter(question__pub_date__year=current_year)
c = q.choice_set.filter(choice_text__startswith=‘Just hacking’)
c.delete()

介绍django管理页面

  1. 创建一个管理员账户

python manage.py createsuperuser
username: admin
Email address: admin@example.com
password: admin
password(again): admin
superuser create successfully.

  1. 启动开发服务器

python manage.py runserver

打开浏览器,转到你本地域名的 “/admin/” 目录, – 比如 “http://127.0.0.1:8000/admin/” 。你应该会看见管理员登录界面:
在这里插入图片描述

  1. 进入管理站点页面
    现在,试着使用你在上一步中创建的超级用户来登录。然后你将会看到 Django 管理页面的索引页:
    在这里插入图片描述
    你将会看到几种可编辑的内容:组和用户。它们是由 django.contrib.auth 提供的,这是 Django 开发的认证框架。
  2. 向管理页面中加入投票应用
    只需要做一件事:我们得告诉管理页面,问题 Question 对象需要被管理。打开 polls/admin.py 文件,把它编辑成下面这样:
polls/admin.py

from django.contrib import admin

from .models import Question

admin.site.register(Question)
  1. 体验便捷的管理功能
    现在我们向管理页面注册了问题 Question 类。Django 知道它应该被显示在索引页里:
    在这里插入图片描述
    点击 “Questions” 。现在看到是问题 “Questions” 对象的列表 “change list” 。这个界面会显示所有数据库里的问题 Question 对象,你可以选择一个来修改。这里现在有我们在上一部分中创建的 “What’s up?” 问题。
    在这里插入图片描述
    点击 “What’s up?” 来编辑这个问题(Question)对象:
    在这里插入图片描述
    页面的底部提供了几个选项:
  • 保存(Save) - 保存改变,然后返回对象列表。
  • 保存并继续编辑(Save and continue editing) - 保存改变,然后重新载入当前对象的修改界面。
  • 保存并新增(Save and add another) - 保存改变,然后添加一个新的空对象并载入修改界面。
  • 删除(Delete) - 显示一个确认删除页面。

通过点击 “今天(Today)” 和 “现在(Now)” 按钮改变 “发布日期(Date Published)”。然后点击 “保存并继续编辑(Save and add another)”按钮。然后点击右上角的 “历史(History)”按钮。你会看到一个列出了所有通过 Django 管理页面对当前对象进行的改变的页面,其中列出了时间戳和进行修改操作的用户名:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值