Django 自带的用于开发的简易服务器,是一个用纯 Python 写的轻量级的 Web 服务器。这个服务器内置在 Django 中是为了能快速的开发,省略简化了配置生产级别的服务器(比如 Apache)方面的工作。不要将这个服务器用于和生产环境相关的任何地方**。这个服务器只是为了开发而设计的。**
1. 创建项目
(python3.8) [root@node8 python-project]# django-admin.py startproject mysite
2. 项目结构
(python3.8) [root@node8 python-project]# cd mysite/
(python3.8) [root@node8 mysite]# ls
manage.py mysite
(python3.8) [root@node8 mysite]# tree
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 5 files
HelloWorld: 项目的容器。
manage.py: 命令行工具。
HelloWorld/init.py: Python 包空文件。
HelloWorld/asgi.py: ASGI 兼容的 Web 服务器的入口。
HelloWorld/settings.py: 项目的设置/配置。
HelloWorld/urls.py: 路由文件
HelloWorld/wsgi.py: WSGI 兼容的 Web 服务器的入口。
3. 启动服务器
(python3.8) [root@node8 mysite]# python3 manage.py runserver 0:8000
报错,报sqlite版本太低
[root@node8 soft]# sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
[root@node8 soft]# wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz
[root@node8 soft]# tar -zxvf sqlite-autoconf-3270200.tar.gz && cd sqlite-autoconf-3270200
[root@node8 sqlite-autoconf-3270200]# ./configure --prefix=/usr/local && make && make install
[root@node8 sqlite-autoconf-3270200]# find /usr/ -name sqlite3
/usr/bin/sqlite3
/usr/lib/python2.7/site-packages/django/db/backends/sqlite3
/usr/lib64/python2.7/sqlite3
/usr/share/bash-completion/completions/sqlite3
/usr/local/bin/sqlite3
[root@node8 sqlite-autoconf-3270200]# /usr/bin/sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
[root@node8 sqlite-autoconf-3270200]# /usr/local/bin/sqlite3 --version
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
[root@node8 sqlite-autoconf-3270200]# mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
[root@node8 sqlite-autoconf-3270200]# ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
[root@node8 sqlite-autoconf-3270200]# sqlite3 --version
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
[root@node8 sqlite-autoconf-3270200]# vim ~/.bashrc
export LD_LIBRARY_PATH="/usr/local/lib"
[root@node8 sqlite-autoconf-3270200]# source ~/.bashrc
(python3.8) [root@node8 mysite]# python3 manage.py runserver 0:8000
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.
July 20, 2020 - 10:26:15
Django version 3.0.6, using settings 'mysite.settings'
Starting development server at http://0:8000/
Quit the server with CONTROL-C
3. 创建投票应用
项目 VS 应用
项目和应用有什么区别?应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者小型的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用。
在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构,这样你就能专心写代码,而不是创建目录了
(python3.8) [root@node8 mysite]# python manage.py startapp polls
(python3.8) [root@node8 mysite]# ls
db.sqlite3 manage.py mysite polls
(python3.8) [root@node8 mysite]# cd polls/
(python3.8) [root@node8 polls]# tree
.
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
4. 编写视图
(python3.8) [root@node8 polls]# pwd
/blueicex/python-project/mysite/polls
(python3.8) [root@node8 polls]# ls
admin.py apps.py __init__.py migrations models.py tests.py views.py
(python3.8) [root@node8 polls]# vim views.py
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
# Create your views here.
5. 为视图创建路由文件 urls.py
(python3.8) [root@node8 polls]# pwd
/blueicex/python-project/mysite/polls
(python3.8) [root@node8 polls]# ls
admin.py apps.py __init__.py migrations models.py tests.py views.py
(python3.8) [root@node8 polls]# vim views.py
(python3.8) [root@node8 polls]# touch urls.py
(python3.8) [root@node8 polls]# vim urls.py
from . import views
from django.urls import path
urlpatterns = [
path('', views.index, name='index'), #must is name='index'
]
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 模式。
6. 将app路由包含到project路由中
(python3.8) [root@node8 mysite]# cd mysite/
(python3.8) [root@node8 mysite]# ls
asgi.py __init__.py __pycache__ settings.py urls.py views.py wsgi.py
(python3.8) [root@node8 mysite]# pwd
/blueicex/python-project/mysite/mysite
(python3.8) [root@node8 mysite]# vim urls.py
"""mysite URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('polls/', include('polls.urls')),
]
7. 验证polls app
(python3.8) [root@node8 mysite]# python manage.py runserver 0:8080
July 20, 2020 - 10:55:11
Django version 3.0.6, using settings 'mysite.settings'
Starting development server at http://0:8080/
Quit the server with CONTROL-C.
(python3.8) [root@node8 mysite]# vim settings.py
DEBUG = True
ALLOWED_HOSTS = ['192.168.0.81']
————Blueicex 2020/07/20 18:59 blueice1980@126.com