【python3.X】Django工程搭建笔记(持续更新)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

IDE:PyCharm社区版
在这里插入图片描述

Python3.6.8
笔记参考Django官方网站学习记录
Demo应用polls为官方投票应用


提示:以下是本篇文章正文内容,下面案例可供参考

一、Django安装及调试

  1. 安装,pip install django在这里插入图片描述

  2. 验证django版本,python -m django --version在这里插入图片描述

  3. 创建项目,django-admin startproject mysite在这里插入图片描述

  4. 启动服务器,python manage.py runserver,在Terminal创空按住Ctrl+C可终止server在这里插入图片描述

  5. 浏览器查看页面在这里插入图片描述

二、Demo工程

2.1 创建应用

  1. 新建应用polls,python manage.py startapp polls在这里插入图片描述在这里插入图片描述

  2. 在polls/views.py视图中输入下列响应内容在这里插入图片描述

  3. 在应用polls下新建视图urls.py(url config文件),并编辑以下内容,实现在polls应用中调用views.index响应在这里插入图片描述在这里插入图片描述在这里插入图片描述

  4. 在根url config文件中加入polls应用的url config。在mysite/urls.py文件添加以下内容,实现对polls应用的url的调用。从第二张图可以看到在mysite/setting中配置了mysite、urls.py为根url config。在这里插入图片描述在这里插入图片描述

  5. 在server没有关闭的情况下,分别用chrome浏览器打开http://127.0.0.1:8000/admin/和http://127.0.0.1:8000/polls/可以看到以下结果在这里插入图片描述在这里插入图片描述

2.2 编写应用

2.2.1 Polls投票应用

2.2.1.1 数据库配置
  • 配置mysite/setting.py中的相应参数
  • python manage.py migrate:创建数据表,支持默认installed_apps,检查默认设置为每个应用创建需要的数据表在这里插入图片描述
2.2.1.2 创建模型

简单的投票应用需要创建两个模型Question,Choice。在polls/model.py加入以上两个模型。一个模型本质上是一张表。在这里插入图片描述
以Choice类进行说明:

  • 继承自 django.db.models.Model 类
  • 属性choice_text:数据库字段名,即数据库有一列名为‘choice_text’,亦可单独命名。为CharField的实例,表示每个字段要处理的数据类型。CharField继承django.db.models.Field。
  • 实例化入参max_length:用于数据库数据校验。
  • ForeignKey():定义表关系,每个 Choice 对象都关联到一个 Question 对象,常用的数据库关系:多对一、多对多和一对一。
2.2.1.3 激活模型
  • 在根设置中安装polls app:即将polls添加到INSTALLED_APPS中。因为 PollsConfig 类写在文件 polls/apps.py 中,所以它的点式路径是 ‘polls.apps.PollsConfig’在这里插入图片描述

  • 检测对模型文件的修改:python manage.py makemigrations polls。修改部分存储为一次迁移migration在这里插入图片描述

  • 查看polls应用的0001迁移内容:python manage.py sqlmigrate polls 0001在这里插入图片描述

  • 执行迁移:python manage.py migrate在这里插入图片描述

2.2.2 settings.py

2.2.2.1 INSTALLED_APPS

包括了在项目中启用的所有 Django 应用

  • django.contrib.admin – 管理员站点
  • django.contrib.auth – 认证授权系统
  • django.contrib.contenttypes – 内容类型框架
  • django.contrib.sessions – 会话框架
  • django.contrib.messages – 消息框架
  • django.contrib.staticfiles – 管理静态文件的框架
2.2.2.2 MIDDLEWARE
2.2.2.3 TEMPLATES

描述了 Django 如何载入和渲染模板

  • BACKEND:默认的设置文件设置了 DjangoTemplates 后端
  • DIRS:
  • APP_DIRS:默认为True,会让 DjangoTemplates 在每个 INSTALLED_APPS 文件夹中寻找 “templates” 子目录。django找到的默认 app_directories为polls/templates/,因此只需要使用 polls/index.html 就可以引用index模板。实际上index模板的完整路径为polls/templates/polls/index.html。
  • OPTIONS
2.2.2.4 DATABASES

ENGINE – 可选值有

  • ‘django.db.backends.sqlite3’
  • ‘django.db.backends.postgresql’
  • ‘django.db.backends.mysql’
  • ‘django.db.backends.oracle’

NAME

  • 数据库的名称。如果使用的是 SQLite,数据库将是你电脑上的一个文件,在这种情况下, NAME 应该是此文件的绝对路径,包括文件名。默认值 os.path.join(BASE_DIR, ‘db.sqlite3’) 将会把数据库文件储存在项目的根目录
2.2.2.5 OTHERS

2.3 创建管理账号

在这里插入图片描述
启动服务器,python manage.py runserver
进入127.0.0.1:8000/admin,输入上方账户密码即可进入下方页面
其中可编辑的内容:组和用户。它们是由 django.contrib.auth 提供的,这是 Django 开发的认证框架
在这里插入图片描述

2.4 向管理页面加入应用

在这里插入图片描述
刷新127.0.0.1:8000/admin可看到下方界面
在这里插入图片描述

2.5 调用API

添加在polls应用Question表中增加一条记录"What’s new?"
在这里插入图片描述在这里插入图片描述
重启服务器,刷新原登录后页面查看新增内容在这里插入图片描述在这里插入图片描述

2.6 添加更多的视图

添加视图
在这里插入图片描述
将视图添加到polls应用urls.py中在这里插入图片描述在浏览器中输入http://127.0.0.1:8000/polls/1/results/,查看新增视图在这里插入图片描述
每个视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse 对象,或者抛出一个异常,比如 Http404

2.7 动态读取数据库中记录

在这里插入图片描述在这里插入图片描述

2.8 视图和页面设计解耦

polls 目录里创建一个 templates 目录,templates下新建polls目录,polls/templates/polls下新建index.html。
划重点:在templates下边要建与应用同名的文件夹,在其下再添加网页模板,避免polls的模板与其他应用模板重名,Django找错的情况。
官方解释如下:
在这里插入图片描述

加入代码如下

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
</head>
<body>
   {% if latest_question_list %}
       <ul>
       {% for question in latest_question_list %}
           <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
       {% endfor %}
       </ul>
   {% else %}
       <p>No polls are available.</p>
   {% endif %}
</body>
</html>

polls/views中index做如下修改

from django.http import HttpResponse
from django.template import loader
from .models import Question

def index(request):
   latest_question_list = Question.objects.order_by('-pub_date')[:5]
   template = loader.get_template('polls/index.html')
   context = {'latest_question_list': latest_question_list,}
   return HttpResponse(template.render(context, request))

或者利用render函数精简:

from django.shortcuts import render
from .models import Question

def index(request):
   latest_question_list = Question.objects.order_by('-pub_date')[:5]
   context = {'latest_question_list': latest_question_list,}
   return render(request, 'polls/index.html', context)

http://127.0.0.1:8000/polls/查看
在这里插入图片描述
点击链接
在这里插入图片描述

2.9 抛出404错误

在templates/polls中新建detail.html内容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{ question }}
</body>
</html>

polls/views,py中修改detail函数如下:

from django.http import HttpResponse, Http404
def detail(request, question_id):
   try:
       question = Question.objects.get(pk=question_id)
   except Question.DoesNotExist:
       raise Http404("Question does not exist")
   return render(request, 'polls/detail.html', {'question': question})

或使用get_object_or_404()

from django.shortcuts import render, get_object_or_404
def detail(request, question_id):
   question = get_object_or_404(Question, pk=question_id)
   return render(request, 'polls/detail.html', {'question': question})

2.10 添加命名空间,消除index硬编码

在polls/urls.py中urlpatterns上方添加代码

app_name = 'polls'

polls/templates/polls/index.html修改代码

<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

解释详见https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial03/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值