Django-1.开始我的第一个Django应用-part1

前言

大家好,欢迎大家阅读本文章,在下深刻的了解到在初次使用Django过程中出现各种问题的无奈、无知和痛苦,以及搜寻查询网络上的中文答案是如此的困难,且有很多问题连答主都说不出什么所以来,只是笼统的告诉我们怎么做,然后尝试他的方法后,并不能解决问题。所以在下希望记录一个系统的Django查阅手册,告诉大家应该怎么做,遇到错误应该如果处理,且这个错误背后的原因是什么。本文章内容主要来源自官网文档(英文),如果读者在参考本系列手册中遇到任何问题,都可以在评论区留言,在下会在能力允许的情况下尽量帮助大家,谢谢您的阅读。

温馨提示:
-文章标题的Django-?表示写该文章的一个大体顺序
-红色背景的小字表示提醒或者备注

开始我们的第一个Django应用

让我们使用一个具体的实例来学习,通过这篇参考资料,我们一步一步的带领你一起参与一个基本的应用构造过程——投票应用

它包含了两个部分:

  • 一个可以让人们查看投票和进行投票的公共网址页面
  • 一个可以让你(管理员)添加、修改和修改投票的管理网址页面

假定你已经安装了Django。你可以通过运行下面的命令行就可以知道Django是否已经安装、Django是哪一个版本。(cmd中运行,如果Django的安装路径已将加入path,则不必移动到安装目录再运行)

...\> py -m django --version

如果Django已经安装了,你就会看到你安装的版本号,如果没安装,你就会得到一个“No module named django”.的错误信息。

这篇参考资料依据Django 3.0版本,它可以支持Pyhon 3.6及以后的版本。如果Django的版本不匹配,你可以更新Django到最新的版本,如果你使用了一个旧版本的Python,你可以参考下面的对应版本:(选择一个兼容的版本)
对应版本号

开始创建项目

如果这是你第一次使用Django,你必须要注意一些初始化设置。就是说,你需要自动生成一些构成Django项目所必需的的代码——一个Django实例的设置集合,包括数据库配置、Django具体的选项和应用具体的设置。

方法一:(通过命令行来执行,cd到你要包括项目代码的目录,然后运行下面的代码)

...\> django-admin startproject mysite

如果上面代码不起作用,出现了

'django-admin' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

尝试一下将django-admin改为django-admin.py;(如果你是通过vip安装的Django,则Django就在系统盘内,如果安装到别的地方,你需要将django-admin的路径加入到系统路径中)
方法二:(通过Pycharm创建比较简单)

通过上面的执行,就会在当前目录得到一个mysite的项目目录

注意:
1.不要在构建python或者Django组件后重新命名项目的名称,特别的,不要使用像django或者test这样容易冲突的名称

2.这些代码在哪里运行呢?
如果你的环境是比较旧的朴素的PHP,你可以会把代码放在Web服务器的根目录下(像/var/www),但是对于Django,你不需要这样做,如果你将所有Python代码放在服务器的根目录下,就有泄漏源码的可能性,这是不安全的。
你可以把你的代码放在根目录之外,例如/home/mycode.

来看一下生成文件的目录列表:
在这里插入图片描述介绍:

  • mysite: 这是该项目的根目录,这个名字你可以随便更换,对Django项目没有任何影响。
  • manage.py:这是一个可以让你和Django项目以不同方式交互的一个命令行工具。你可以了解它的更多细节:jango-admin and manage.py
  • mysite/: 这个目录实际上就是你项目的Python包,如果你要import它里面的东西,你就会用到这个包的名字(比如:mysite.urls)
  • mysite/init.py:这是一个空的文件,用来告诉你这个目录被当做一个python包。more
  • mysite/settings.py: 整个Django项目的设置或配置文件。more detail:it’s how to work.
  • mysite/urls.py:描述了整个项目中的url,以一张文本表格样式似的陈列了Django项目中的地址。more detail:url dispatcher
  • mysite/asgi.py: 这是为支持ASGI编译的web服务器提供的入口,可以服务你的项目。more detail:how to deploy with ASGI
  • mysite/wsgi.py:这是为支持WSGI编译的web服务器提供的入口,可以服务你的项目。more detail:how to deploy with WSGI

运行服务器

来验证一下你的Django项目是否成功了。cmd切换到mysite目录,运行下面的命令:

...\> py 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.
April 13, 2020 - 20:49:21
Django version 3.0.5, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

忽略这些警告,我们稍后会处理。

现在你已经运行了服务器,一个轻量级的用python写的Web服务器就完成了。项目中包含了Django,所以你可以快速的开发东西,不需要再配置服务器,像Apache,它只有在你配置好环境之后,才能运行。

现在是时候警告你了:不要使用类似于这样的任何东西都现成的服务器,一般只在开发的时候使用这种服务器。正式情况还是要使用Apache这样的服务器。

现在服务器正在运行,通过http://127.0.0.1:8000/ 这个网址你就可以访问你的web服务器。你就会看到一个Congratulation页面,还有一个火箭在飞,它运行成功了。

默认情况下,运行服务器的内部ip端口号都是8000. 如果你想要改变端口号,例如,这个命令设置服务器运行在端口号8080:

...\> py manage.py runserver 8080

如果你想要改变服务器的IP(连同端口号)。执行:

...\> py manage.py runserver 0.0.0.0:8000

自动重新加载服务器:如果需要的话,服务器会对于每一次请求自动重新加载Python代码,所以,你不需要为了看到效果每次加载服务器。然而,像添加文件类似的行为并不会自动重新加载服务器,所以,在这些情况下,你需要重新启动服务器。

退出服务器:ctrl+c

创建投票应用

现在,你的项目已经建立起来了,就可以开始工作了。

在Django中你所写的每一个应用中所包含的Python包都遵循一个惯例,Django和一个自动生成一个app结构的基本目录的工具一起运行,所以你可以只关注于写代码而不是创建目录。

项目和app有什么区别呢?

一个App是一个可以实现一些功能的Web应用,比如网络日志系统、一个公共记录的数据库或者小型投票app;一个项目是配置文件和特定网址的所有app的集合,一个项目可以包含多个app,一个app只能处在一个项目中。

你的app可以在Python path上任何一个地方运行。在这篇参考中,我们将会构建我们投票app在和manage.py同一级别的目录,所以它是作为mysite的最高级别模块导入的,而不是mysite的子模块。

开始创建你的app,确保在manage.py的同级目录中,cmd运行命令:

...\> py manage.py startapp polls

就会创建polls目录,目录列表如下:
在这里插入图片描述这个目录结构保存着poll应用。

开始写你的第一个视图(view)

打开文件polls/views.py,把下面这些代码放进去:

from django.http import HttpResponse

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

这可能是Django中最简单的view啦。为了调用这个view,我们还需要把它映射给URL,所以我们需要配置URL。

在polls目录中创建URl配置文件urls.py。
在这里插入图片描述
拷贝下面的代码到urls.py:

from django.urls import path

from . import views

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

下一步就是在指定polls.urls模块的根路径配置,在mysite/urls.py中,导入django.url.include,在url模板列表中,插入include()函数如下:

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

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

include()函数允许引用其他的URL配置文件,无论何时Django遇到include(),它都会砍掉与它匹配的URL部分,并且将剩下的字符串发送到include()函数中包含的路径中去,做进一步的处理。

include()背后的想法是为了让URL更容易的即插即用。因为polls处在它自己的URL配置文件中(polls/urls.py),所以include()可以被替换为"/polls/",或者"/fun_polls/",或者“/content/polls/”,或者其他根路径,这个polls仍然会工作。

何时使用include()?

当你包含其他的URL模式时,你就应该使用include(),当然,admin.site.urls是唯一 一个例外。

你现在就已经连接index页面和URL配置文件了。验证一下它是否有效果吧:

...\> py manage.py runserver

访问: http://localhost:8000/polls/ ,你就会看到“Hello,world.You’re at the polls index.”,这就是你定义的index页面。

页面没有找到?
是不是访问的是http://localhost:8000,应该访问http://localhost:8000/polls/

path()函数有四个参数,两个是必须的:route和view,还有两个是可选的:关键参数kwargs和name。 在这里,值得去复习一下这些参数是干嘛的?

  • route: route是一个字符串,包含了一个URL实例,当处理一个请求时,Django会从第一个path模式中开始匹配,在列表中从上到下,对比每一个path匹配模式,直到它找到一个与之匹配的模式才停止。path模式不会搜索GET和POST的参数或者它定义域的名字,比如http://www.eample.com/myapp/,URL配置文件只会找myapp/,在http://www.example.com/myapp/?page=3,URL配置文件同样会找myapp/。
  • view: 当Django找到一个匹配块时,它会使用HttpRequest对象调用具体的view函数, 并且从路由中捕获values,HttpRequest就是view函数的第一个参数,而values就是view函数的其他参数。一会举一个例子。
  • kwargs:任意的关键字参数都可以被通过,且最终到达目标view。在这篇参考中,我们不计划使用Django的这个特性。
  • name:给你的URL取一个清晰且不和Django中任何地方冲突的名字,特别是Django中的模板。这是一个非常强大的特性,允许你当只涉及一个文件时,就进行一个全局的URL模式变化。

下一篇:开始Django之旅-part2_Django和数据库mysql

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值