Django 开发教程
创建项目
在命令行中创建一个新项目,使用 startproject
命令:
$ django-admin startproject mysite
其中 mysite
可以换成任何你喜欢的项目名称。执行后会创建一个新目录,目录结构如下:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
可以看到 Django 自动生成了一些文件,这些文件都有各自的作用:
- manage.py 用来在命令行和项目进行交互
- mysite/init .py 告诉 Python 可以将 mysite 视为一个 Python 包。
- mysite/settings.py 设置文件
- mysite/urls.py 声明网站的 url
- mysite/asgi.py ASGI-兼容的服务器入口
- mysite/asgi.py WSGI-兼容的服务器入口
部署服务器
创建项目以后,在最外层的 mysite 目录下执行以下命令,可以部署服务器:
$ python manage.py runserver
但要注意,此服务器只能用作产品开发,最好不要用在产品上,因为 Django 的目的是为了开发网站,而不是运营网站。
当服务器运行时,访问 即可看到网页内容。
改变端口
若要改变端口,例如将端口改为 8080,启动服务器时执行python manage.py runserver 8080
若要改变 IP 地址,例如将 IP 改为 0.0.0.0(简写为0),启动服务器时运行python manage.py runserver 0:8000
自动重启
修改代码后,开发服务器会自动地重新加载 Python 代码,所以不用重启服务器也能看到网页的变化。
创建 APP
现在可以给项目创建一些应用程序了,让我们来创建一个可以自由绘制图表的程序。图表由文本框和各式各样的箭头组成,文本框里可以承载文字,图片和数学公式,而箭头可以呈现弯曲,波浪,虚线等各种形态。让我们开始吧。
首先在命令行创建 APP:
python manage.py startapp FreeDiagram
目录结构如下:
free-diagram/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
网页视图
首先要让网页显示点什么东西,Django 的内容显示是通过一个个函数实现的,每访问一个网站时,就会执行相应的函数,例如在这里,当你访问主页时, index
就会被执行,返回的是一个 HttpResponse
对象,里面包含了网页要显示的内容。当然这里只是简简单单显示了一行文字,但后面会慢慢加入更多复杂的功能。
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
URL 对应
要将 view.py 中的函数对应到相应的 URL,就需要编辑 urls.py,Django 没有为我们自动创建,因此需要手动创建一个空文件,建完以后目录结构如下:
free-diagram/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
然后要将 views.py 里的 index
函数与主页的 URL 对应上,编写如下代码即可:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
接下来要将 free-diagram 的 URL 汇入总项目的 URL 中,使用 include()
函数可以把 APP 中的 URL 并入总项目中。
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('free-diagram/', include('free-diagram.urls')),
path('admin/', admin.site.urls),
]
数据库设置
现在,可以打开 mysite/settings.py 来查看一些和数据库有关的设置,可以更改如数据库引擎、名称、用户名、密码、主机等信息。
有些 APP 需要创建表才能正常运行,为此,需要执行:
$ python manage.py migrate
创建模型
通常,网页需要不断渲染许多相似的对象,我们需要遵循 DRY 原则(DON’T REPEAT YOURSELF),通过创建模型,可以很快地进行对网站的搭建。在我们的 Diagram 应用中,最基本的两个模型就是 文本框 和 箭头,打开 Diagram/models.py 文件,加入这两个模型:
from django.db import models
class TextBox(models.Model):
text = models.CharField(max_length=200)
color_R = models.IntegerField(default=0)
color_G = models.IntegerField(default=0)
color_B = models.IntegerField(default=0)
font = models.CharField(default='WeiRuanYeHei')
fontsize = models.IntegerField(default=12)
anchor_x = models.IntegerField(default=0)
anchor_y = models.IntegerField(default=0)
class Arrow(models.Model):
start_x = models.IntegerField(default=0)
start_y = models.IntegerField(default=0)
end_x = models.IntegerField(default=0)
end_y = models.IntegerField(default=0)
激活 APP
建好模型以后,Django 提供了自动创建数据库和设置API接口的服务,而我们需要将 APP 激活,这些模型就会被真正创建。打开 FreeDiagram/settings.py,进行编辑:
INSTALLED_APPS = [
'Diagram.apps.DiagramConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
然后在命令行执行
$ python manage.py makemigrations polls
观察到如下输出,就说明成功了
Migrations for 'polls':
polls/migrations/0001_initial.py
- Create model Question
- Create model Choice
调用 API
Django 提供了 shell 接口,让开发者可以把玩(测试)创建好的模型。命令行执行
$ python manage.py shell
然后就会出来一整个 IPython 的效果,我们先导入模型
>>> from polls.models import TextBox, Arrow
可以查看一个模型的所有的实例:
>>> TextBox.objects.all()
可以创建一个新实例:
>>> tb = TextBox(text='y=f(x)')
用户登录系统
创建用户
首先,我们需要创建一个管理员账号,也就是超级用户:
$ python manage.py createsuperuser
按照提示输入用户名和密码。
启动开发者服务器
运行服务器然后以管理员身份登录,先在命令行启动服务器:
$ python manage.py runserver
然后访问 http://127.0.0.1:8000/admin/, 输入用户名密码,管理员界面大概长这样:
可以看到用户信息和数据库信息。
; 让管理员界面可以修改应用
我们希望管理员在界面上可以修改一些已有的模型,打开 Diagram/admin.py,进行编辑:
from django.contrib import admin
from .models import TextBox
admin.site.register(TextBox)
请求与回应
在 Django 中,当一个页面被请求,一个 HTTPRequest
对象就会被创建。
Original: https://blog.csdn.net/weixin_43265267/article/details/122701858
Author: 他吃吃喝喝
Title: Django 开发教程
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734253/
转载文章受原作者版权保护。转载请注明原作者出处!