Django入门笔记

Tutorial

[TOC]

Part 1: Requests and responses

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
基于 django==4.2.1
# 查看Django版本
python -m django --version
# 创建Django工程
django-admin startproject Tiancheng
# 创建Django应用
python manage.py startapp PersonalDesc
# 运行Django
python manage.py runserver IP:PORT
# 创建文件迁移脚本(一定在migrage前面,因为只有先生成了迁移文件,后面才能通过迁移脚本文件进行迁移)
python manage.py makemigrations
# 创建/更新模型表属性
python manage.py migrate
# 创建超级用户
python manage.py createsuperuser
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# APP Module‘s urls.py
from django.url import path
from . import views

urlpatterns = [
path('', views.index, name='index')
]

# Project's urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('', include('[AppName].urls'))
path('admin/', admin.site.urls)
]

# Views文件
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

# 其中path(route, view, kwargs, name)
# route 相对路由路径
# view HttpResponse对象
# kwargs Request参数
# name pattern唯一识别名称

Part 2: Models and the admin site

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 配置Postgres数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'djangodb',
'USER': 'postgres',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}

# 安装Python-Postgres第三方包
conda install psycopg2 -y

# 创建数据库djangodb
create database djangobd owner 'postgres';

# 切换了数据库就要重新运行createsupersuer
python manage.py createsuperuser

# 创建迁移文件
python manage.py makemigrations [APPNAME]
# 检查迁移SQL
python manage.py sqlmigrate [APPNAME] [migrations file name]
# 例: python manage.py sqlmigrate personaldesc 0001
# 迁移
python manage.py migrate [APPNAME]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
python manage.py shell

from personaldesc.models import PersonalInfo as PI
from django.utils import timezone

q = PI(create_date=timezone.now(), name="ABC")
q.save()
q.id
q.name
q.create_date
q.name = "ABCD"
q.save()

PI.objects.all()

注意XXX.objects.filter和XXX.objects.get不一样,前者save无效,后者正常,具体原因可能得后续深入了解原理。

# 如果有头行结构 可以通过头对象对行对象进行操作 语法 头对象记录(注意不是记录集,是某条记录).行对象类名小写_set.操作方法()
# q[0].personalschoolinfo_set.all()

# from django.db.models import Q # 字符串取反筛选器 日期和数字类型的筛选 可以直接使用 字段名__ne=xxx
# q[0].personalschoolinfo_set.all().filter(~Q(type="xiaoue"))

# q[0].personalschoolinfo_set.create(xxx=xxx,xxx=xxx)
# q.delete()
1
2
3
4
5
6
7
# 用默认的管理员界面管理模型
# 首先需要将模型在admin.py中注册
from .models import PersonalInfo, PersonalSchoolInfo
admin.site.register(PersonalInfo)
admin.site.register(PersonalSchoolInfo)

# 此时访问管理员页面就可以看见我们定义的模型管理界面了

Part 3: Views and templates

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 在views.py文件中添加视图方法,接收HttpResponse(django.http)类型返回值

from django.http import Http404
from django.template import loader

template = loader.get_template('personaldesc/index.html')
return HttpResponse(template.render(context, request))

from django.shortcuts imoprt render, get_object_or_404
return render(request, "personaldesc/index.html", context)

raise Http404("This is new 404 page.")

# html -> template
<a href="{% url 'app_name:index' person_id %}">{{ name }}</a>

1
2
3
4
5
6
7
render()其实就是对HttpResponse(template.render(context, request) 的封装,其中template=loader.get_template("app/XXX.html")

django.shortcuts中有一些model和view适当解耦的方法,get_object_or_404()、get_list_or_404()、get_object_or_404()等

template system 模板系统中不要使用硬编码写链接地址,一般使用{% url ‘app_name:path_name' 参数 %}的方式,这样一般request参数格式不变的情况下,路由地址如果发生改变不用大批量修改。

app_name是定义在views中的,方便template中进行区分重名html资源。

Part 4: Forms and generic views

1
2
3
4
5
6
forllo.counter
{% csrf_token %}

from django.http import HttpResponseRedirect
from django.urls import reverse

Part 5: Testing

Part 6: Static files

Part 7: Customizing the admin site

Start From Zero

python -m django –version

django-admin startproject mysite

cd mysite

python manage.py runserver

python manage.py startapp polls

最开始可以使用HttpResponse进行简单的响应返回。

urls.py中的include可以将url路由文件进行统一管理