3.投票-1创建项目和子应用
创建项目
- 命令
$ python django-admin startproject mysite
- 目录结构
mysite/ # 项目容器、可任意命名 manage.py # 命令行工具 mysite/ # 纯 Python 包 # 你引用任何东西都要用到它 __init__.py # 空文件 告诉Python这个目录是Python包 settings.py # Django 项目配置文件 urls.py # URL 声明 # 就像网站目录 asgi.py # 部署时用的配置 # 运行在ASGI兼容的Web服务器上的 入口 wsgi.py # 部署时用的配置 # 运行在WSGI兼容的Web服务器上的
- 初始化数据库 迁移
$ python mangae.py makemigrations $ python manage.py migrate
Django 简易服务器
-
用于开发使用,Django 在网络框架方面很NB, 但在网络服务器方面不行~
专业的事让专业的程序做嘛,最后部署到 Nginx Apache 等专业网络服务器上就行啦。
-
自动重启服务器
对每次访问请求、重新载入一遍 Python 代码
新添加文件等一些操作 不会触发重启
-
命令
$ python manage.py runserver
E:\PYTHON\0CODE\mysite> E:\PYTHON\0CODE\mysite>python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). June 29, 2022 - 22:35:10 Django version 4.0.5, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
-
指定端口
$ python manage.py runserver 8080
创建应用
- 命令
$ python manage.py startapp polls
- 目录结构
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
编写应用视图
- 视图函数
# polls/views.py from django.shortcuts import render # Create your views here. from django.http import HttpRespose def index(rquest): return HttpResponse("投票应用 -首页")
配置路由
-
配置路由
# polls/urls.py 子应用路由 from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
# mysite/urls.py 全局路由 include()即插即用 from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/', include('polls.urls')), path('admin/', admin.site.urls), ]
-
效果
path() 参数含义
path('', views.index, name='index'),
path('polls/', include('polls.urls'))
-
route 路径
一个匹配URL的规则,类似正则表达式。不匹配GET、POST传参 、域名
-
view 视图函数
Django 调用这个函数,默认传给函数一个 HttpRequest 参数
-
kwargs 视图函数参数
字典格式
-
name 给这条URL取一个温暖的名子~
可以在 Django 的任意地方唯一的引用。允许你只改一个文件就能全局地修改某个 URL 模式。
3.投票-2本地化和数据库API
本地化配置
-
时区和语言
# mysite/mysite/settings.py # Internationalization # https://docs.djangoproject.com/en/4.0/topics/i18n/ LANGUAGE_CODE = 'zh-hans' # 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_TZ = True
-
为啥要在数据库之前?
配置时区,数据库可以以此做相应配置。比如时间的存放是以UTC还是本地时间...
数据库配置
- django 支持 sqlite mysql postgresql oracle
- 默认是sqlite 它是本地的一个文件name 哪里直接写了文件的绝对路径
# mysite/mysite/settings.py # Database # https://docs.djangoproject.com/en/4.0/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
- 迁移 主要为Django默认的模型建表
python manage.py migrate
创建模型
-
编写
# mysite/polls/models.py from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
-
很多数据库的知识 都可以用到里面
Question Choice 类都是基于models.Model, 是它的子类。
类的属性--------表的字段
类名-----------表名
还有pub_date on_delete=models.CASCAD 级联删除, pub_date 的字段描述, vo tes的默认值, 都和数据库很像。
而且max_length这个个字段,让Django可以在前端自动校验我们的数据
激活模型
-
把配置注册到项目
# mysite/mysite/settings.py # Application definition INSTALL