“Linux上创建第一个Django 项目”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
第160行: 第160行:
 
#获取源代码(在主目录中运行)
 
#获取源代码(在主目录中运行)
 
[root@djangoServer ~]# cd ~
 
[root@djangoServer ~]# cd ~
 +
 
[root@djangoServer ~]# wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz
 
[root@djangoServer ~]# wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz
 +
 
[root@djangoServer ~]# tar -zxvf sqlite-autoconf-3270200.tar.gz
 
[root@djangoServer ~]# tar -zxvf sqlite-autoconf-3270200.tar.gz
 +
  
 
#构建并安装
 
#构建并安装
 +
 
[root@djangoServer ~]# cd sqlite-autoconf-3270200
 
[root@djangoServer ~]# cd sqlite-autoconf-3270200
 +
 
[root@djangoServer sqlite-autoconf-3270200]# ./configure --prefix=/usr/local
 
[root@djangoServer sqlite-autoconf-3270200]# ./configure --prefix=/usr/local
 +
 
[root@djangoServer sqlite-autoconf-3270200]# make && make install
 
[root@djangoServer sqlite-autoconf-3270200]# make && make install
 +
 
[root@djangoServer sqlite-autoconf-3270200]# find /usr/ -name sqlite3
 
[root@djangoServer sqlite-autoconf-3270200]# find /usr/ -name sqlite3
 +
 
/usr/bin/sqlite3
 
/usr/bin/sqlite3
 +
 
/usr/lib64/python2.7/sqlite3
 
/usr/lib64/python2.7/sqlite3
 +
 
/usr/local/bin/sqlite3
 
/usr/local/bin/sqlite3
 +
 
/usr/local/python3/lib/python3.7/site-packages/django/db/backends/sqlite3
 
/usr/local/python3/lib/python3.7/site-packages/django/db/backends/sqlite3
 +
 
/usr/local/python3/lib/python3.7/sqlite3
 
/usr/local/python3/lib/python3.7/sqlite3
 +
 
[root@djangoServer sqlite-autoconf-3270200]#  
 
[root@djangoServer sqlite-autoconf-3270200]#  
 +
  
 
#不必要的文件,目录删除
 
#不必要的文件,目录删除
 +
 
[root@djangoServer sqlite-autoconf-3270200]# cd ~
 
[root@djangoServer sqlite-autoconf-3270200]# cd ~
 +
 
[root@djangoServer ~]# ls
 
[root@djangoServer ~]# ls
 +
 +
 
anaconda-ks.cfg  sqlite-autoconf-3270200  sqlite-autoconf-3270200.tar.gz
 
anaconda-ks.cfg  sqlite-autoconf-3270200  sqlite-autoconf-3270200.tar.gz
 +
 
[root@djangoServer ~]#  
 
[root@djangoServer ~]#  
 +
 
[root@djangoServer ~]# rm -rf sqlite-autoconf-3270200.tar.gz
 
[root@djangoServer ~]# rm -rf sqlite-autoconf-3270200.tar.gz
 +
 
[root@djangoServer ~]# rm -rf sqlite-autoconf-3270200
 
[root@djangoServer ~]# rm -rf sqlite-autoconf-3270200
 +
  
 
#检查版本
 
#检查版本
 +
 
## 最新安装的sqlite3版本
 
## 最新安装的sqlite3版本
 +
 
[root@djangoServer ~]# /usr/local/bin/sqlite3 --version
 
[root@djangoServer ~]# /usr/local/bin/sqlite3 --version
 +
 
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
 
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
 +
 +
 
[root@djangoServer ~]#  
 
[root@djangoServer ~]#  
 +
  
 
## Centos7自带的sqlite3版本
 
## Centos7自带的sqlite3版本
 +
 
[root@djangoServer ~]# /usr/bin/sqlite3 --version
 
[root@djangoServer ~]# /usr/bin/sqlite3 --version
 +
 
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
 
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
 +
 
[root@djangoServer ~]#  
 
[root@djangoServer ~]#  
 +
 +
  
 
## 可以看到sqlite3的版本还是旧版本,那么需要更新一下。
 
## 可以看到sqlite3的版本还是旧版本,那么需要更新一下。
 +
 
[root@djangoServer ~]# sqlite3 --version
 
[root@djangoServer ~]# sqlite3 --version
 +
 
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
 
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
 +
 
[root@djangoServer ~]#  
 
[root@djangoServer ~]#  
  
 
## 更改旧的sqlite3
 
## 更改旧的sqlite3
 +
 
[root@djangoServer ~]# mv /usr/bin/sqlite3  /usr/bin/sqlite3_old
 
[root@djangoServer ~]# mv /usr/bin/sqlite3  /usr/bin/sqlite3_old
 +
 +
  
 
## 软链接将新的sqlite3设置到/usr/bin目录下
 
## 软链接将新的sqlite3设置到/usr/bin目录下
 +
 
[root@djangoServer ~]# ln -s /usr/local/bin/sqlite3  /usr/bin/sqlite3
 
[root@djangoServer ~]# ln -s /usr/local/bin/sqlite3  /usr/bin/sqlite3
 +
  
 
## 查看当前全局sqlite3的版本
 
## 查看当前全局sqlite3的版本
 +
 
[root@djangoServer ~]# sqlite3 --version
 
[root@djangoServer ~]# sqlite3 --version
 +
 +
 
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
 
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
 +
 +
 
[root@djangoServer ~]#  
 
[root@djangoServer ~]#  
 +
 +
  
 
#将路径传递给共享库
 
#将路径传递给共享库
 +
 
# 设置开机自启动执行,可以将下面的export语句写入 ~/.bashrc 文件中,如果如果你想立即生效,可以执行source 〜/.bashrc 将在每次启动终端时执行
 
# 设置开机自启动执行,可以将下面的export语句写入 ~/.bashrc 文件中,如果如果你想立即生效,可以执行source 〜/.bashrc 将在每次启动终端时执行
 +
 
[root@djangoServer ~]# export LD_LIBRARY_PATH="/usr/local/lib"
 
[root@djangoServer ~]# export LD_LIBRARY_PATH="/usr/local/lib"
  
 
#检查Python的SQLite3版本
 
#检查Python的SQLite3版本
 +
 
[root@djangoServer ~]# python3
 
[root@djangoServer ~]# python3
 +
 
Python 3.7.1 (default, May  3 2019, 09:55:04)  
 
Python 3.7.1 (default, May  3 2019, 09:55:04)  
 +
 
Type 'copyright', 'credits' or 'license' for more information
 
Type 'copyright', 'credits' or 'license' for more information
 +
 
IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.
 
IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.
  

2019年8月10日 (六) 03:07的版本

本章我们将介绍Django 管理工具及如何使用 Django 来创建项目,第一个项目我们以 HelloWorld 来命令项目。

测试版本说明:

   Python 3.6.0
   Django 2.1.7

Django 管理工具

安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin。我们可以使用 django-admin 来创建一个项目:

我们可以来看下django-admin 的命令介绍:

[root@localhost ~]# django-admin

Type 'django-admin help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata

创建第一个项目

使用 django-admin 来创建 HelloWorld 项目:

django-admin startproject HelloWorld

创建完成后我们可以查看下项目的目录结构:

$ cd HelloWorld/
$ yum install tree
$ tree
.
|-- HelloWorld
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
`-- manage.py

目录说明:

   HelloWorld: 项目的容器。
   manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
   HelloWorld/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
   HelloWorld/settings.py: 该 Django 项目的设置/配置。
   HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
   HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

接下来我们进入 HelloWorld 目录输入以下命令,启动服务器:

python3 manage.py runserver 0.0.0.0:8000

0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000。

在HelloWorld/settings.py中下面这一项添加允许访问的IP地址:

ALLOWED_HOSTS = ['10.0.0.30']

这里把Linux服务器的本机IP设上即可。

在浏览器输入你服务器的 ip(这里我们输入本机 IP 地址: 10.0.0.30:8000) 及端口号,如果正常启动,输出结果如下:

Python9-14.png

视图和 URL 配置

在先前创建的 HelloWorld 目录下的 HelloWorld 目录新建一个 view.py 文件,并输入代码:

HelloWorld/HelloWorld/view.py 文件代码:

from django.http import HttpResponse
 
def hello(request):
    return HttpResponse("Hello world ! ")

接着,绑定 URL 与视图函数。打开 urls.py 文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中:

HelloWorld/HelloWorld/urls.py 文件代码:

from django.conf.urls import url
 
from . import view
 
urlpatterns = [
    url(r'^$', view.hello),
]

整个目录结构如下:

tree

.
|-- HelloWorld
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py              # url 配置
|   |-- urls.pyc
|   |-- view.py              # 添加的视图文件
|   |-- view.pyc             # 编译后的视图文件
|   |-- wsgi.py
|   `-- wsgi.pyc
`-- manage.py

完成后,启动 Django 开发服务器,并在浏览器访问打开浏览器并访问:

Python9-15.png

我们也可以修改以下规则:

HelloWorld/HelloWorld/urls.py 文件代码:

from django.urls import path
 
from . import view
 
urlpatterns = [
    path('hello/', view.hello),
]

通过浏览器打开 http://10.0.0.30:8000/hello,输出结果如下:

Python9-16.png

注意:项目中如果代码有改动,服务器会自动监测代码的改动并自动重新载入,所以如果你已经启动了服务器则不需手动重启。

path() 函数

Django path() 可以接收四个参数,分别是两个必选参数:route、view 和两个可选参数:kwargs、name。 语法格式:

path(route, view, kwargs=None, name=None)

  • route: 字符串,表示 URL 规则,与之匹配的 URL 会执行对应的第二个参数 view。
  • view: 用于执行与正则表达式匹配的 URL 请求。
  • kwargs: 视图使用的字典类型的参数。
  • name: 用来反向获取 URL。

参考文档:

[1] https://www.runoob.com/django/django-first-app.html



执行python3 manage.py runserver 0.0.0.0:8000尾行报错:django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17). 解决方法: #更新SQLite 3 #获取源代码(在主目录中运行) [root@djangoServer ~]# cd ~

[root@djangoServer ~]# wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz

[root@djangoServer ~]# tar -zxvf sqlite-autoconf-3270200.tar.gz


#构建并安装

[root@djangoServer ~]# cd sqlite-autoconf-3270200

[root@djangoServer sqlite-autoconf-3270200]# ./configure --prefix=/usr/local

[root@djangoServer sqlite-autoconf-3270200]# make && make install

[root@djangoServer sqlite-autoconf-3270200]# find /usr/ -name sqlite3

/usr/bin/sqlite3

/usr/lib64/python2.7/sqlite3

/usr/local/bin/sqlite3

/usr/local/python3/lib/python3.7/site-packages/django/db/backends/sqlite3

/usr/local/python3/lib/python3.7/sqlite3

[root@djangoServer sqlite-autoconf-3270200]#


#不必要的文件,目录删除

[root@djangoServer sqlite-autoconf-3270200]# cd ~

[root@djangoServer ~]# ls


anaconda-ks.cfg sqlite-autoconf-3270200 sqlite-autoconf-3270200.tar.gz

[root@djangoServer ~]#

[root@djangoServer ~]# rm -rf sqlite-autoconf-3270200.tar.gz

[root@djangoServer ~]# rm -rf sqlite-autoconf-3270200


#检查版本

    1. 最新安装的sqlite3版本

[root@djangoServer ~]# /usr/local/bin/sqlite3 --version

3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7


[root@djangoServer ~]#


    1. Centos7自带的sqlite3版本

[root@djangoServer ~]# /usr/bin/sqlite3 --version

3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

[root@djangoServer ~]#


    1. 可以看到sqlite3的版本还是旧版本,那么需要更新一下。

[root@djangoServer ~]# sqlite3 --version

3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

[root@djangoServer ~]#

    1. 更改旧的sqlite3

[root@djangoServer ~]# mv /usr/bin/sqlite3 /usr/bin/sqlite3_old


    1. 软链接将新的sqlite3设置到/usr/bin目录下

[root@djangoServer ~]# ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3


    1. 查看当前全局sqlite3的版本

[root@djangoServer ~]# sqlite3 --version


3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7


[root@djangoServer ~]#


#将路径传递给共享库

  1. 设置开机自启动执行,可以将下面的export语句写入 ~/.bashrc 文件中,如果如果你想立即生效,可以执行source 〜/.bashrc 将在每次启动终端时执行

[root@djangoServer ~]# export LD_LIBRARY_PATH="/usr/local/lib"

#检查Python的SQLite3版本

[root@djangoServer ~]# python3

Python 3.7.1 (default, May 3 2019, 09:55:04)

Type 'copyright', 'credits' or 'license' for more information

IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import sqlite3

In [2]: sqlite3.sqlite_version Out[2]: '3.27.2'

In [3]: exit