2-第一个Django程序

第一个Django程序

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

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

1、创建项目

本文继承前一篇章节的环境(centos 7 python3.6.2 Django2.2)进行演示:

1.1 创建存放项目的目录

[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir source_project      # 创建Django项目存放目录

1.2 创建Django项目

[root@localhost opt]# cd source_project/
[root@localhost source_project]# django-admin startproject mysite   # 创建名为mysite的Django项目

创建完成后会在当前目录下生成一个mysite的目录。这个目录的结构如下:

2-第一个Django程序

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项目是否可以启动

[root@localhost source_project]# cd mysite/     # 进入到项目目录中
[root@localhost mysite]# python3 manage.py runserver  # 运行项目

你也许会报下面这个错误,但请不要慌张。

2-第一个Django程序

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

2-第一个Django程序

我觉得问题可能出现这里,查看下本机sqlite3数据库版本,如下:

2-第一个Django程序

1.4 安装sqlite3新版本sqlite3.31。

下载sqlite3新版本

[root@localhost mysite]# wget -P /usr/src/ https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz
[root@localhost mysite]# tar -zxvf /usr/src/sqlite-autoconf-3310100.tar.gz -C /opt/
[root@localhost mysite]# cd /opt/sqlite-autoconf-3310100/  # 进入解压后的包中
[root@localhost sqlite-autoconf-3310100]# ./configure --prefix=/opt/sqlite3310  # 配置安装选项
[root@localhost sqlite-autoconf-3310100]# make && make install  # 编译 安装

安装完成后我们看下该目录结构如下:

2-第一个Django程序

1.5 将新版本的sqlite3.31替换系统自带的旧版sqlite3.7.17

[root@localhost bin]#whereis sqlite3   # 查找sqlite3命令所在的位置

2-第一个Django程序
[root@localhost bin]#cd /opt/sqlite3310/bin
[root@localhost bin]# mv /usr/bin/sqlite3 /usr/bin/sqlite37  # 重命名旧版本的sqlite3
[root@localhost bin]# cp sqlite3 /usr/bin/sqlite3 # 将新版本的sqlite3复制到/usr/bin/目录中
[root@localhost bin]# echo "/opt/sqlite3310/lib/" > /etc/ld.so.conf.d/sqlite3.conf  # 指定将新版本的库位置
[root@localhost bin]# ldconfig  # 更新动态链接库

完成上面的所有工作后,我们新安装的sqlite3.31就可以代替旧版本的sqlite3.7.17。

1.6 验证sqlite3,31是否正常工作

2-第一个Django程序

在python环境中进行验证

2-第一个Django程序

好了,现在我们回到Django项目中运行Django项目,查看是否可以运行。

[root@localhost bin]# cd /opt/source_project/mysite/
[root@localhost mysite]# python3 manage.py runserver  # 运行Django项目

如果你看到如下界面,那么恭喜你,你的项目已经运行起来了。

2-第一个Django程序

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

2-第一个Django程序

我们在局域网访问http://192.168.10.100:8000,看看会出现什么,如果不能访问,请把本机的防火墙关闭掉,在试试,

[root@localhost mysite]# systemctl stop firewalld  # 关闭防火墙

再次访问http://192.168.10.100:8000,如果一切顺利你会看到如下所示:

2-第一个Django程序

没错,我们的访问被拒绝了,此时我们需要修改mysite项目中mysite目录下的settings.py文件了。

[root@localhost mysite]# vim mysite/settings.py

在配置文件中你会看到如下配置选项:

2-第一个Django程序
关于ALLOWED_HOSTS的值可以是主机名,也可以是IP地址
匹配主机名,如果是完整的主机名如www.example.com,那么将只匹配www.example.com
在匹配的过程中不区分大小写
ALLOWED_HOSTS = ['www.example.com']
匹配主机名,如果不是完整的主机名如.example.com,那么可以匹配所有带example.com的域名,如www.exarmple.com,abc.exarmple.com,a.exarmple.com
在匹配的过程中不区分大小写
ALLOWED_HOSTS = ['.example.com']
匹配IP地址和主机名
ALLOWED_HOSTS = ['www.example.com','192.168.1.10','192.168.1.200']
允许所有主机访问Django服务器
ALLOWED_HOSTS = ['*']

我们是初学就将该选项设置为允许所有主机都可以访问Django服务器ALLOWED_HOSTS = [‘*’],然后再次允许Django服务器:

root@localhost mysite]# python3 manage.py runserver 192.168.10.100:8000

继续访问http://192.168.10.100:8000,如果一切顺利你会看到如下所示:

2-第一个Django程序

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

应用程序:是指一个web应用程序,它是一个功能的集合,如登录认证,数据展示,还有我们接下来将要写的投票功能等。

Django项目和应用程序的区别是:项目是一个特定网站的配置和应用程序的集合。应用程序是一个Web应用程序,是一个功能的集合例如,一个Weblog系统、一个公共记录数据库或一个简单的投票应用程序等。一个项目可以包含多个应用程序。

2.1创建投票app

[root@localhost mysite]# python3 manage.py startapp polls  # 创建投票应用

该命令会为我们自动生成应用程序的基本目录结构,因此您可以专注于编写代码,而不是创建目录。该目录结构如下:

2-第一个Django程序

应用程序polls创建好后,我们需要在该目录下的views.py中实现投票的功能。

2,2 初识视图views.py

[root@localhost mysite]# vim polls/views.py  # 编辑views.py,在该文件中添加如下代码
from django.shortcuts import render
from django.http import HttpResponse
Create your views here.

def index(request):
    return HttpResponse('这是我的第一个web应用')

这是最简单的视图。要调用视图,我们需要将它映射到一个URL,因为Django服务器是通过URL路由来寻找视图的,为此我们需要在polls目录中创建名为urls.py的文件。

2.3 创建urls.py

[root@localhost mysite]# vim polls/urls.py # 创建URL路由,在路由中写入如下内容。
from django.urls import path
from . import views

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

此时我们的polls应用的目录结构如下:

2-第一个Django程序

虽然我们在polls中设置了路由,但目前该路由仅局限于本polls应用内部,Django主程序还无法找到polls中的URL路由,需要在Django主程序的URL中告诉polls中URL的位置,这样主程序才能找到polls中的URL。

2.4 在主程序mysite/mysite/urls.py引用polls/urls.py

[root@localhost mysite]# vim mysite/urls.py  # 编辑主程序中URL,在主程序的URL中引用polls中的URL
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('polls/', include('polls.urls')),   # 引用polls中的URL,这样主程序便可以找到polls中的URL了
]

2.5 验证

经过上面一系列的操作,现在我们来验证Django是否可以正常工作。

[root@localhost mysite]# python3 manage.py runserver 192.168.10.100:8000  # 启动服务

访问http://192.168.10.100:8000

2-第一个Django程序

我们发现和最开始访问时不一样了,并且我们发现我们刚刚创建的polls应用也在上面。

我们尝试访问http://192.168.10.100:8000/polls/看看会发生什么

2-第一个Django程序

没错是我们刚刚在polls/views.py中写入的内容。这说明我们创建的polls应用可以工作了,虽然没有实现投票的功能,但离实现投票的功能进了一步。

参考文档:https://docs.djangoproject.com/en/2.2/intro/tutorial01/

下一章节:在Django中使用mariadb数据库:https://www.cnblogs.com/caesar-id/p/12319636.html

Original: https://www.cnblogs.com/caesar-id/p/12315266.html
Author: id_iot
Title: 2-第一个Django程序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582612/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 北京思特奇2023年校招笔试(Java)

    北京思特奇2023年校招笔试(Java) 1、表达式 (short)10/10.2*2 运算后结果是什么类型? 答案:double,浮点数默认是double,自动类型向上转换为浮点…

    Linux 2023年6月14日
    099
  • B站学习斯坦福大学Swift 语言教程 iOS11 开发【第一集】踩到的几个坑(XCode 13.2.1版本)

    在Xcode 13.2.1 中,找不到从哪里拖拽添加button控件 Xcode13起,添加UI控件需要点击右上方的➕号 button的title属性设置成ghost的emoji后…

    Linux 2023年6月13日
    0108
  • 【MQTT】阿里云搭建MQTT物联网平台通信

    MQTT环境搭建和测试 物联网环境搭建 MQTT.fx使用 物联网环境搭建 1.首先进入阿里云官网注册并登录你的账号。2.点击控制台。3.在产品与服务下面搜索物联网平台4.点击公共…

    Linux 2023年6月13日
    092
  • Python中str()和repr()的区别

    其实用处就是最大的区别了:str()主要用来为终端用户输出一些信息,而repr()主要用来调试;同时后者的目标是为了消除一些歧义(例如浮点数的精度问题),前者主要为了可读。 In …

    Linux 2023年6月8日
    0120
  • 一道诡异的考试题

    题目: 给定$a$张黑牌,$b$白牌,甲,乙两人按以下顺序抽牌: 甲抽一张,乙抽一张,然后弃去一张,然后重复以上过程。 先抽到黑牌者胜,求甲和乙获胜的概率$mod 10045358…

    Linux 2023年6月6日
    090
  • NewReplacer使用技巧

    上次写博客至今有段时间了,这些日子,认真过,努力过,职场中不管有哪些让人失意或不快的事,终归到底,是自己不够强大。。。 好吧,新的一年,不磨磨唧唧了,一般处理xss漏洞使用正则匹配…

    Linux 2023年6月6日
    0104
  • CentOS 7 安装 mysql 5.7.27 for zabbix

    本文是因为需要安装zabbix系统,才贴出的此步骤,供自己查阅方便之用; 在安装使用zabbix前,需要先安装数据库,这里使用的是MySQL数据库进行部署,给出安装步骤,大家觉得有…

    Linux 2023年6月8日
    0104
  • 百度云虚拟主机BCH安装PHP框架CodeIgniter

    注意:fastcgi_param SCRIPT_FILENAME /home/bae/app/index.php;这一项中的路径,这个百度云虚拟主机的手册有说明。 将该配置文件(b…

    Linux 2023年6月13日
    0111
  • 《kasini3000》批量修改linux被控机密码

    《卡死你3000》,是开源,免费,跨平台的devops批量脚本框架。 网址:码云家 https://gitee.com/chuanjiao10/kasini3000 批量生成密码之…

    Linux 2023年5月27日
    0106
  • shell的入门

    命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线 不能使用标点符号 不能使用bash里面关键字 使用变量加上$就可使用 只读变量 rea…

    Linux 2023年6月8日
    090
  • LeetCode-125. 验证回文串

    题目来源 题目详情 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明: 本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: &#8…

    Linux 2023年6月7日
    089
  • JavaScript this

    本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。 博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。 博主…

    Linux 2023年6月13日
    099
  • Golang 实现 Redis(10): 本地原子性事务

    为了支持多个命令的原子性执行 Redis 提供了事务机制。 Redis 官方文档中称事务带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行…

    Linux 2023年5月28日
    0109
  • linux 文件查找详解

    文件查找 介绍:在文件系统上查找符合条件的文件。 文件查找: 非实时查找(数据库查找):locate 实时查找:find 1、locate locate 查询系统上预建的文件索引数…

    Linux 2023年6月7日
    0106
  • Git工作流程

    学于2018年6月 总的流程: 一: 首先克隆整个项目到本地 二: 在本地创建一个属于自己的分支, 并push到远程(当时的工作情况是, 每实现一个功能, 或修改一个BUG都创建一…

    Linux 2023年6月6日
    0126
  • Bash编程中对字符串的操作

    Bash的字符串操作 String="Hello World" #获取字符串长度,获取字符长度的变量调用应该使用${},这里大括号是必须的 #例1-1 echo…

    Linux 2023年6月13日
    0115
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球