一.django的命令
1. django-admin startproject projectname;创建一个项目
2. django-admin startapp appname 创建一个应用(应用一定要再项目的根目录下)
3. python manage.py migrate 创建应用里model.py中的对象对用的表
4. python manage.py makemigrations appname 检查model.py中的修改,并做数据迁移
5. python manage.py sqlmigrate 迁移数据,会返回对应的sql语句
6. python manage.py check 检查项目中存在的问题
7. python manage.py createsuperuser 创建一个超级管理员用户
8. python manage.py runserver 启动服务
二.配置说明
1. INSTALLED_APPS 列表:向其中添加你的app,用于激活应用模板,名称再应用的app.py文件中
2. DATABASES 字典:用于设置应用的数据库,(注意字段要大写)
ENGINE(常用):
'django.db.backends.sqlite3',
'django.db.backends.postgresql',
'django.db.backends.mysql',
'django.db.backends.oracle',
'django.db.backends.sqlite3'
NAME:数据库名称,如果是sqllite则是文件路径
USER: 用户名,
PASSWORD: 密码,
HOST: ip地址,
PORT: 端口号,
3. TIME_ZONE :用于设置时域
三.创建数据库模板文件
-
在创建的app里models.py中创建自己对象类(官方文档例子)
-
在setting.py文件中添加对应的配置(https://blog.csdn.net/weixin_42134789/article/details/108373452)
htmls是应用名,apps是apps.py(相当于应用的配置文件),HtmlsConfig是类名,
-
执行下列命令创建、迁移数据表
py manage.py makemigrations
py manage.py migrate
- 对数据表进行操作
# 获取所有表数据
Reporter.objects.all()
# 创建一条数据
r = Reporter(full_name='John Smith')
r.save()
# 根据id查询数据
r = Reporter.objects.get(id=1)
# 删除一条数据(更据对象的delete方法删除)
r.delete()
# 条件查询数据
Article.objects.filter(reporter__full_name__startswith='John')
四.admin.py
是利用django自带的后台来管理数据库中的表;
# 在对应得应用根目录下创建admin.py
# 添加格式
from django.contrib import admin
from .models import *
admin.site.register(Users) # 参数是模板类名
创建登录后台初始用户
- python manage.py createsuperuser
五.使用render返回HTML模板(静态文件也是同理,目录名称为static)
-
在创建的app中新建一个templates目录
-
在setting配置文件中将APP_DIR设置为True
-
在INSTALLA_APPS中添加创的app
-
在templates目录中再创建一个app同名目录
为什么多创建一个目录?为了避免和其他应用的模板文件重名,导致加载失败
-
创建对应的HTML模板
-
创建静态文件
六.配置应用的urls
-
在项目的urls.py中注册app的urls,路由查询方式是从上到下依次匹配
-
在应用的urls.py中添加视图的路由
-
路由传递参数
-
注册自定义的路径转换器
转换器是一个类,需要有一个类属性,和实现两个方法- 字符串形式的 regex 类属性。
- to_python(self, value) 方法,用来处理匹配的字符串转换为传递到函数的类型。如果没有转换为给定的值,它应该会引发 ValueError 。ValueError 说明没有匹配成功,因此除非另一个 URL 模式匹配成功,否则会向用户发送404响应。
- 一个 to_url(self, value) 方法,它将处理 Python 类型转换为字符串以用于 URL 中。如果不能转换给定的值,它应该引发 ValueError。ValueError 被解释为无匹配项,因此 reverse() 将引发 NoReverseMatch,除非有其他 URL 模式匹配。
- 在 URLconf 中使用 register_converter() 来注册自定义的转换器类
class TestConverter:
# 匹配四个数字
regex = '[0-9]{4}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return '%04d' % value
from django.urls import path, register_converter
from . import converters, views
register_converter(converters.TestConverter, 'yyyy')
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<yyyy:year>/', views.year_archive),
...
]
- 使用正则表达式url中的数据
在 Python 正则表达式中,命名正则表达式组的语法是 (?Ppattern) ,其中 name 是组名,pattern 是要匹配的模式
from django.urls import path, re_path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]
- urls配置公共前缀,去除冗余
- 额外传参
include()传递额外参数,会将参数传递给include中每一个url
- 反向解析url
https://docs.djangoproject.com/zh-hans/4.1/topics/http/urls/