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
| from django.url import path from . import views
urlpatterns = [ path('', views.index, name='index') ]
from django.contrib import admin from django.urls import include, path
urlpatterns = [ path('', include('[AppName].urls')) path('admin/', admin.site.urls) ]
from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")
|
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 # 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
|
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
|
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.")
<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 模板系统中不要使用硬编码写链接地址,一般使用{
app_name是定义在views中的,方便template中进行区分重名html资源。
|
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路由文件进行统一管理