Django 初试水(一)

  2020年注定是一个不平凡的一年!坚持就是胜利,一起加油!

  至于为什么使用 Django,也不想说太多。个人喜欢,这里不做介绍。直接进入主题。show me the code!!!

  python 的环境什么的,这里就不赘述了,Python 包含了一个名为 SQLite 的轻量级数据库,所以暂时不自行设置一个数据库。使用的是

C:WINDOWSsystem32>python --version
Python 3.7.4

C:WINDOWSsystem32>python -m django --version
3.0.3

  验证安装好的 Django 是否能被 Python 识别,可以在命令行查看:

C:WINDOWSsystem32>python
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32

Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated.  Libraries may fail to load.  To activate this environment
please see https://conda.io/activation

Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print(django.get_version())
3.0.3
>>> 

  事情准备就绪之后,开始下一步。开始之前提一点:

项目和应用的区别:应用程序是一个Web应用程序,它可以做一些事情——例如,Weblog系统、公共记录数据库或小型投票应用程序。项目是特定网站的配置和应用程序的集合。

一个项目可以包含多个应用程序。一个应用程序可以在多个项目中。

  创建项目,我们需要初始化一些系统配置,包括数据库配置,Django配置和应用程序配置。---即一个Django项目实例需要的设置项集合。

打开命令行,cd(进入)到一个你想放置你代码的目录,然后执行下面的命令:

E:workpy_dj>django-admin startproject mysite
# startproject 创建了以下的目录结构

mysite/ manage.py mysite/ __init__.py settings.py urls.py asgi.py wsgi.py
mysite:根目录是项目的容器。它的名字对Django来说并不重要;您可以将其重命名为任何您喜欢的名称。
  manage.py: 一个让你用各种方式管理 Django 项目的命令行工具。你可以阅读 django-admin and manage.py 获取所有 manage.py 的细节。
  里面一层的 mysite/ 目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).
    mysite/__init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。如果你是 Python 初学者,阅读官方文档中的 更多关于包的知识。
    mysite/settings.py:Django 项目的配置文件。如果你想知道这个文件是如何工作的,请查看 Django 配置 了解细节。
    mysite/urls.py:Django 项目的 URL 声明,就像你网站的“目录”。阅读 URL调度器 文档来获取更多关于 URL 的内容。
    mysite/asgi.py: An entry-point for ASGI-compatible web servers to serve your project. See How to deploy with ASGI for more details.
    mysite/wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。阅读 如何使用 WSGI 进行部署 了解更多细节。

  检验创建的 Django 项目是否创建成功,请切换到外城的 mysite 目录执行命令

E:workpy_djmysite>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
February 18, 2020 - 15:43:04
Django version 3.0.3, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[18/Feb/2020 15:43:12] "GET / HTTP/1.1" 200 16351
[18/Feb/2020 15:43:12] "GET /static/admin/css/fonts.css HTTP/1.1" 304 0
[18/Feb/2020 15:43:12] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 304 0
[18/Feb/2020 15:43:12] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 304 0
[18/Feb/2020 15:43:12] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 304 0

  访问出现以下页面为成功。

a

  更改端口

默认情况下,runserver 命令会将服务器设置为监听本机内部 IP 的 8000 端口。

如果你想更换服务器的监听端口,请使用命令行参数。举个例子,下面的命令会使服务器监听 8080 端口:

E:workpy_djmysite>python manage.py runserver 8080
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
February 18, 2020 - 15:55:46
Django version 3.0.3, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CTRL-BREAK.

  完整的关于开发服务器的文档可以在 :djamdin:`runserver` 参考文档中找到。

  在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构,

这样你就能专心写代码,而不是创建目录了。

  你的应用可以存放在任何 Python path 中定义的路径。在这里,和 manage.py 同级目录下创建应用 polls 。这样它就可以作为顶级模块导入,而不是 mysite 的子模块。

E:workpy_djmysite>py manage.py startapp polls

E:workpy_djmysite>

  这将会创建一个 polls 目录,它的目录结构大致如下:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

  这个目录结构包含了应用的全部内容。

  先创建一个视图,打开  polls/views.py

##polls/views.py¶
from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")

  这里返回了一个 http 响应,这是 Django 中最简单的视图。如果想要看见效果,还需要配置 URL 映射----需要 URLconf 。

  在 polls 目录下新建一个 urls.py 文件。 最新的目录结构应该是这样:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

  在映射的 URL 文件中 polls/urls.py ,输入以下信息:

from django.urls import path

from . import views

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

  这里定义了应用的 URLconf  ,因此需要在项目的 URLconf 指定 应用的 URLconf .修改项目跟目录下的文件

 mysite/urls.py ,在文件的urlpatterns 列表插入一个include(),修改完毕如下:

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

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

  函数 include() 允许引用其他的 URLconfs 。每当 Django 遇到 include() 的时候,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。

设计者设计 include() 的理念是使其可以即插即用。当包括其它 URL 模式时你应该总是使用 include() , admin.site.urls 是唯一例外。

  在启动之前,注意。一定要把视图给创建好,不然会报一下错误: 视图找不到属性 index 

  File "E:workpy_djmysitepollsurls.py", line 19, in <module>
    path('', views.index, name='index'),
AttributeError: module 'polls.views' has no attribute 'index'

  页面404 的注意看看,访问页面的时候要注意是不是加上应用名:http://127.0.0.1:8000/polls/

  函数 path() 具有四个参数,两个必须参数:route 和 view,两个可选参数:kwargs 和 name。现在,是时候来研究这些参数的含义了。

  path() 参数: route

  route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。

这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/

  path() 参数: view

  当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。稍后,我们会给出一个例子。

  path() 参数: kwargs

  任意个关键字参数可以作为一个字典传递给目标视图函数。本教程中不会使用这一特性。

  path() 参数: name

  为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。

  

原文地址:https://www.cnblogs.com/why-home/p/12326811.html