Django 入门教程看了好几遍,始终没能入门,隔一段时间没敲代码就找不到门在哪了。。。所以写下此博客,加深学习印象,记录下知识点,以备后续复习巩固使用。如果这篇笔记也能帮到你,欢迎点赞收藏。
笔记记得比较粗略,如有不明白的欢迎提问,和我一起交流学习。
整篇文章以Djago3.1 官方文档为基础展开学习。
文章目录
1 入门
跟着官方文档一起,做一个投票应用。
1.1 开始一个Django项目
1.1.1 创建Django项目
$ django-admin startproject mysite
创建的“mysite”目录结构
mysite
├── manage.py
└── mysite
├── asgi.py
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
进入mysite目录下尝试运行项目:
$ python manage.py runserver
在8080端口运行:python manage.py runserver 8080
访问 http://127.0.0.1:8080 (端口根据自己配置的来)
看到以下画面说明运行成功
1.1.2 配置语言与时区
修改文件mysite/settings.py
的对应位置
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
再次运行python manage.py runserver 8080
语言修改成功!
1.2 开始一个App
1.2.1创建一个投票应用polls
$ python manage.py startapp polls
此时的目录结构
mysite
├── db.sqlite3
├── manage.py
├── mysite
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── polls
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
1.2.2 Web版的 Hello world
修改视图层代码
polls/view.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(requests):
return HttpResponse('Hello polls! It works!')
创建polls的路由
在polls的目录下创建urls.py
文件
polls/urls.py
from django.urls import path
from . import views
urlpatterns=[
path('', views.index, name='index'),
]
修改mysit路由
编辑mysite/urls.py
新增from django.urls import include
urlpatterns
中新增一条path('polls/', include('polls.urls')),
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
再次运行看效果
再次运行python manage.py runserver 8080
打开http://127.0.0.1:8080/polls
1.3 创建模型
1.3.1 migrate创建数据表
$ python manage.py migrate
1.3.2 安装应用到项目中
编辑mysite/settings.py
找到INSTALLED_APPS
添加'polls.apps.PollsConfig',
INSTALLED_APPS = [
'polls.apps.PollsConfig',
# ......
]
编辑polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date=models.DateTimeField('出版日期')
class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text=models.CharField(max_length=200)
vote=models.IntegerField(default=0)
1.3.3 makemigrations 把数据模型生成对应的数据表
$ python manage.py makemigrations
Migrations for ‘polls’:
polls/migrations/0001_initial.py
- Create model Question
- Create model Choice
$ python manage.py migrate
1.3.4 使用Shell调试模型
$ python manage.py shell
数据的新增与修改
>>> from polls.models import Question
>>> from django.utils import timezone
>>> Question.objects.all() # 查看Question下所有项目
# 新增数据
>>> q = Question(question_text='第一个问题',pub_date=timezone.now())
>>> q.save() # 保存数据
>>> q.id # 查看这个问题的id
1
>>> q.question_text # 查看q的question_text字段
>>> q.question_text = "What's up?" # 修改字段的值
>>> q.save()
# 查询数据
## 通过ID查询
>>> Question.objects.filter(id=1)
## 通过文本开始字符查询
Question.objects.filter(question_text__startswith='What')
## 通过日期查询
Question.objects.get(pub_date__year=current_year)
# 给选项新增数据
q = Question.objects.get(pk=1)
q.choice_set.create(choice_text='The sky', votes=0)
## 查看有哪些选项
q.choice_set.all()
## 计算选项的个数
q.choice_set.count()
## 查询
Choice.objects.filter(question__pub_date__year=current_year)
## 删除
c = q.choice_set.filter(choice_text__startswith='Just hacking')
c.delete()
1.3.5 给模型添加自定义方法
判断是否是刚刚发布的
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)