查看: 145|回复: 0

2-第一个Django程序

[复制链接]
发表于 2020-2-16 04:54:32 | 显示全部楼层 |阅读模式
第一个Django程序

从本章节开始将通过实现一个投票应用程序,来让用户逐步的相识Django。这个程序由两步分组成:

  • 公共站点,允许用户访问进行投票,和查看投票。
  • 站点管理,允许添加,删除,修改投票信息。
1、创建项目

本文继承前一篇章节的环境(centos 7  python3.6.2 Django2.2)进行演示:
1.1 创建存放项目标目录
  1. [[email protected] ~]# cd /opt/[[email protected] opt]# mkdir source_project      # 创建Django项目存放目录
复制代码
1.2 创建Django项目
  1. [[email protected] opt]# cd source_project/[[email protected] source_project]# django-admin startproject mysite   # 创建名为mysite的Django项目
复制代码
创建完成后会在当前目录下天生一个mysite的目录。这个目录的结构如下:

mysite项目文档结构简介:
mysite/:项目标根目录,只是项目标一个容器。它的名字对Django来说并不重要;您可以将其重命名为任何您喜好的名称。
mysite/manage.py:一个命令行实用程序,允许您以各种方式与Django项目交互。您可以在django-admin和manage .py中阅读关于manage .py的所有细节。
关于django-admin和manage .py参考文档:https://docs.djangoproject.com/en/2.2/ref/django-admin/
mysite/mysite:这个目录是一个python包,可以通过这个包名来导出想要利用的模块。
mysite/mysite/__init__.py:一个空文件,它告诉Python应该把这个目录看作一个Python包。
关于python包请参考:https://docs.python.org/3/tutorial/modules.html#tut-packages
mysite/mysite/settings.py:Django项目标配置文件。关于配置文件的一些设置,目前还不打算全部过一遍,用到哪项就对哪项进行设置即可。
settings.py的设置选项可参考:https://docs.djangoproject.com/en/2.2/topics/settings/
settings.py中选项值可参考:https://docs.djangoproject.com/en/2.2/ref/settings/
mysite/mysite/urls.py:django项目标URL路径。
urls.py的配置信息请参考:https://docs.djangoproject.com/en/2.2/topics/http/urls/
mysite/mysite/wsgi.py:一个与wsgi兼容的web服务器服务于您的项目标入口点。
关于wsgi.py请参考:https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/
1.3 验证Django项目是否可以启动
  1. [[email protected] source_project]# cd mysite/     # 进入到项目目录中[[email protected] mysite]# python3 manage.py runserver  # 运行项目
复制代码
你也许会报下面这个错误,但请不要张皇。

我觉得错误的题目不在这,继续往上找我们会看到如下:

我觉得题目大概出现这里,查看下本机SQLite3数据库版本,如下:

1.4 安装sqlite3新版本sqlite3.31。
下载sqlite3新版本
  1. [[email protected] mysite]# wget -P /usr/src/ https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz[[email protected] mysite]# tar -zxvf /usr/src/sqlite-autoconf-3310100.tar.gz -C /opt/[[email protected] mysite]# cd /opt/sqlite-autoconf-3310100/  # 进入解压后的包中[[email protected] sqlite-autoconf-3310100]# ./configure --prefix=/opt/sqlite3310  # 配置安装选项[[email protected] sqlite-autoconf-3310100]# make && make install  # 编译 安装
复制代码
安装完成后我们看下该目录结构如下:

1.5 将新版本的sqlite3.31替换系统自带的旧版sqlite3.7.17
  1. [[email protected] bin]#whereis sqlite3   # 查找sqlite3命令所在的位置
复制代码
  1. [[email protected] bin]#cd /opt/sqlite3310/bin[[email protected] bin]# mv /usr/bin/sqlite3 /usr/bin/sqlite37  # 重命名旧版本的sqlite3[[email protected] bin]# cp sqlite3 /usr/bin/sqlite3 # 将新版本的sqlite3复制到/usr/bin/目录中[[email protected] bin]# echo "/opt/sqlite3310/lib/" > /etc/ld.so.conf.d/sqlite3.conf  # 指定将新版本的库位置[[email protected] bin]# ldconfig  # 更新动态链接库
复制代码
完成上面的所有工作后,我们新安装的sqlite3.31就可以代替旧版本的sqlite3.7.17。
1.6 验证sqlite3,31是否正常工作

在python环境中进行验证

好了,如今我们回到Django项目中运行Django项目,查看是否可以运行。
  1. [[email protected] bin]# cd /opt/source_project/mysite/[[email protected] mysite]# python3 manage.py runserver  # 运行Django项目
复制代码
如果你看到如下界面,那么恭喜你,你的项目已经运行起来了。

从上面的图片我们可以知道,服务运行在本地的127.0.0.1:8000上,此时只能本机进行访问,局域网的其它主机是不能访问的。我们可以指定服务器的IP所在及端标语(如下192.168.10.100:8000),来让局域网的其它主机进行访问。

我们在局域网访问http://192.168.10.100:8000,看看会出现什么,如果不能访问,请把本机的防火墙关闭掉,在试试,
  1. [[email protected] mysite]# systemctl stop firewalld  # 关闭防火墙
复制代码
再次访问http://192.168.10.100:8000,如果一切顺利你会看到如下所示:

没错,我们的访问被拒绝了,此时我们需要修改mysite项目中mysite目录下的settings.py文件了。
  1. [[email protected] mysite]# vim mysite/settings.py
复制代码
在配置文件中你会看到如下配置选项:
  1. 关于ALLOWED_HOSTS的值可以是主机名,也可以是IP所在# 匹配主机名,如果是完整的主机名如www.example.com,那么将只匹配www.example.com# 在匹配的过程中不区分大小写ALLOWED_HOSTS = ['www.example.com']
  2. # 匹配主机名,如果不是完整的主机名如.example.com,那么可以匹配所有带example.com的域名,如www.exarmple.com,abc.exarmple.com,a.exarmple.com# 在匹配的过程中不区分大小写ALLOWED_HOSTS = ['.example.com']
  3. # 匹配IP所在和主机名ALLOWED_HOSTS = ['www.example.com','192.168.1.10','192.168.1.200']
  4. # 允许所有主机访问Django服务器ALLOWED_HOSTS = ['*']
复制代码
我们是初学就将该选项设置为允许所有主机都可以访问Django服务器ALLOWED_HOSTS = ['*'],然后再次允许Django服务器:
  1. [email protected] mysite]# python3 manage.py runserver 192.168.10.100:8000
复制代码
继续访问http://192.168.10.100:8000,如果一切顺利你会看到如下所示:

2、创建web应用程序投票App

应用程序:是指一个web应用程序,它是一个功能的集合,如登录认证,数据展示,还有我们接下来将要写的投票功能等。
Django项目和应用程序的区别是:项目是一个特定网站的配置和应用程序的集合。应用程序是一个Web应用程序,是一个功能的集合例如,一个Weblog系统、一个公共记录数据库或一个简单的投票应用程序等。
一个项目可以包含多个应用程序。一个应用程序可以在多个项目中。
2.1创建投票app
  1. [[email protected] mysite]# python3 manage.py startapp polls  # 创建投票应用
复制代码
该命令会为我们自动天生应用程序的基本目录结构,因此您可以专注于编写代码,而不是创建目录。该目录结构如下:

应用程序polls创建好后,我们需要在该目录下的views.py中实现投票的功能。
2,2 初识视图views.py
  1. [[email protected] mysite]# vim polls/views.py  # 编辑views.py,在该文件中添加如下代码from django.shortcuts import renderfrom django.http import HttpResponse# Create your views here.def index(request):    return HttpResponse('这是我的第一个web应用')
复制代码
这是最简单的视图。要调用视图,我们需要将它映射到一个URL,由于Django服务器是通过URL路由来寻找视图的,为此我们需要在polls目录中创建名为urls.py的文件。
2.3 创建urls.py
  1. [[email protected] mysite]# vim polls/urls.py # 创建URL路由,在路由中写入如下内容。from django.urls import pathfrom . import viewsurlpatterns = [    path('',views.index,name='index'),]
复制代码
此时我们的polls应用的目录结构如下:

虽然我们在polls中设置了路由,但目前该路由仅范围于本polls应用内部,Django主程序还无法找到polls中的URL路由,需要在Django主程序的URL中告诉polls中URL的位置,这样主程序才能找到polls中的URL。
2.4 在主程序mysite/mysite/urls.py引用polls/urls.py
  1. [[email protected] mysite]# vim mysite/urls.py  # 编辑主程序中URL,在主程序的URL中引用polls中的URLfrom django.contrib import adminfrom django.urls import path,includeurlpatterns = [    path('admin/', admin.site.urls),    path('polls/', include('polls.urls')),   # 引用polls中的URL,这样主程序便可以找到polls中的URL了]
复制代码
2.5 验证
经过上面一系列的利用,如今我们来验证Django是否可以正常工作。
  1. [[email protected] mysite]# python3 manage.py runserver 192.168.10.100:8000  # 启动服务
复制代码
访问http://192.168.10.100:8000

我们发现和最开始访问时不一样了,并且我们发现我们刚刚创建的polls应用也在上面。
我们尝试访问http://192.168.10.100:8000/polls/看看会发生什么

没错是我们刚刚在polls/views.py中写入的内容。这分析我们创建的polls应用可以工作了,虽然没有实现投票的功能,但离实现投票的功能进了一步。
参考文档:https://docs.djangoproject.com/en/2.2/intro/tutorial01/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?用户注册

x

天涯海角也要找到Ni:2-第一个Django程序

中发现Ni: 2-第一个Django程序
中发现Ni: 2-第一个Django程序
中发现Ni: 2-第一个Django程序
中发现Ni: 2-第一个Django程序
中发现Ni: 2-第一个Django程序
中发现Ni: 2-第一个Django程序
相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表