Django 纯净版的创建:
使用Django admin路径:
python3 manage.py createsuperuser # 创建admin账户密码 |
安装Django环境:
# 安装virtualenv |
settings:配置
- 如果使用默认的sqlite数据库:
# 在虚拟环境下使用: |
from pathlib import Path |
urls:配置
from django.contrib import admin |
Django 多App的创建:
1、在根目录下创建目录:
apps# 创建apps
# 以下命令 在项目根目录下运行 就是在有 manage.py文件的那个路径
mkdir apps # 创建apps文件夹
# 创建即将创建的 app名称文件夹
mkdir apps/app01
# 创建app01
python3 manage.py startapp app01 apps/app01 # 在apps/app01 中创建app01程序
# 创建即将创建的 app名称文件夹
mkdir apps/www
# 创建app01
python3 manage.py startapp www apps/www # 在apps/www 中创建www程序修改app下面 apps.py中的配置文件

在settings中组册app
INSTALLED_APPS = [
# 'django.contrib.admin', # 纯净版django # django 内置后台管理,简单数据库的增删改查
# 'django.contrib.auth', # 纯净版django 剔除 # 用户登录和认证权限
# 'django.contrib.contenttypes', # 纯净版django 剔除 # 复杂表结构关系
# 'django.contrib.sessions', # 纯净版django 剔除 # 如果项目中有登录成功 让用户可以访问
# 'django.contrib.messages', # 纯净版django 剔除 # 消息展示,依赖Session
'django.contrib.staticfiles', # 静态资源处理,图片、css、js等
'apps.app01.apps.App01Config'
]
路由:配置
路由分发配置:
主路由:
from django.urls import path, re_path, include
urlpatterns = [
path("web/", include("apps.www.urls"))
]子路由(apps/www):
from django.urls import path
from apps.www import views
urlpatterns = [
path("user/", views.user)
]视图配置:
from django.http import HttpResponse
# Create your views here.
def user(request):
return HttpResponse("创建用户名成功 >>> ")
路由中
name的使用 => 反向生成网址,登录成功 => 跳转页面:from apps.app01 import views
# 自定义请求 添加模块
from django.urls import URLPattern, ResolverMatch
from django.urls.resolvers import RoutePattern, RegexPattern # RoutePattern:普通路由, 正则路由: RegexPattern
class MyURLPattern(URLPattern):
def resolve(self, path):
match = self.pattern.match(path)
if match:
new_path, args, captured_kwargs = match
# Pass any default args as **kwargs.
kwargs = {**captured_kwargs, **self.default_args}
return ResolverMatch(
self.callback,
args,
kwargs,
self.pattern.name,
route=str(self.pattern),
captured_kwargs=captured_kwargs,
extra_kwargs=self.default_args,
)
class MyRoutePattern(RoutePattern):
def match(self, path):
match = self.regex.search(path)
if match:
# RoutePattern doesn't allow non-named groups so args are ignored.
kwargs = match.groupdict()
for key, value in kwargs.items():
converter = self.converters[key]
try:
kwargs[key] = converter.to_python(value)
except ValueError:
return None
return path[match.end():], (), kwargs
return None
urlpatterns = [
MyURLPattern(MyRoutePattern("login/<str:v1>", name="n1", is_endpoint=True), views.login, None, "n1"), # 等价于 path('login/', views.login, name="n1"),
]def login(request, v1):
url = reverse('n1', kwargs={"v1": v1}) # kwargs={"<路由中的键>": <用户传递进来的v1>}
print(url) # /login/sdad
return HttpResponse("欢迎登录!")urls.py配置:from django.contrib import admin
from django.urls import path, re_path
from apps.app01 import views
# 自定义请求 添加模块
from django.urls import URLPattern, ResolverMatch
from django.urls.resolvers import RoutePattern, RegexPattern # RoutePattern:普通路由, 正则路由: RegexPattern
# 重写 URLPattern
class MyURLPattern(URLPattern):
def resolve(self, path):
match = self.pattern.match(path)
if match:
new_path, args, captured_kwargs = match
# Pass any default args as **kwargs.
kwargs = {**captured_kwargs, **self.default_args}
return ResolverMatch(
self.callback,
args,
kwargs,
self.pattern.name,
route=str(self.pattern),
captured_kwargs=captured_kwargs,
extra_kwargs=self.default_args,
)
# 重写 RoutePattern
class MyRoutePattern(RoutePattern):
def match(self, path):
match = self.regex.search(path)
if match:
# RoutePattern doesn't allow non-named groups so args are ignored.
kwargs = match.groupdict()
for key, value in kwargs.items():
converter = self.converters[key]
try:
kwargs[key] = converter.to_python(value)
except ValueError:
return None
return path[match.end():], (), kwargs
return None
urlpatterns = [
# 默认后台登录页面, 一般不用(自己重写)
# path('admin/', admin.site.urls),
# http://127.0.0.1:8000/login/ # 默认地址 无传参
# http://127.0.0.1:8000/login/?a1=1&a2=2 # 默认传递两个参数 : a1=1 a2=2
MyURLPattern(MyRoutePattern("login/", name=None, is_endpoint=True), views.login, None, None),
# path('login/', views.login),
# http://127.0.0.1:8000/info/2222/
# http://127.0.0.1:8000/info/2222/?a1=1&a2=2
# path("info/<int:v1>/", views.info),
MyURLPattern(MyRoutePattern("info/<int:v1>/", name=None, is_endpoint=True), views.info, None, None),
# http://127.0.0.1:8000/info/2222/
# http://127.0.0.1:8000/info/2222/?a1=1&a2=2
# path("xx/<path:v2>/", views.s_path),
MyURLPattern(MyRoutePattern("xx/<path:v2>/", name=None, is_endpoint=True), views.s_path, None, None),
# # http://127.0.0.1:8000/xx/f9aa6e73-c310-8aab-a36c-e9758d8c4a1d/
# path("xx/<uuid:v3>/", views.uuid),
MyURLPattern(MyRoutePattern("xx/<uuid:v3>/", name=None, is_endpoint=True), views.uuid, None, None),
# # http://127.0.0.1:8000/other/11/kanoc/
# path("other/<int:v1>/<str:v2>/", views.other),
MyURLPattern(MyRoutePattern("other/<int:v1>/<str:v2>/", name=None, is_endpoint=True), views.other, None, None),
# 要使用 re_path 要引入文件 from django.urls import path, re_path
# # http://127.0.0.1:8000/yy/2024-05-14/
# re_path(r'yy/(\d{4})-(\d{2})-(\d{2})', views.yy),
MyURLPattern(RegexPattern(r'yy/(\d{4})-(\d{2})-(\d{2})', name=None, is_endpoint=True), views.yy, None, None),views.py配置:
from django.shortcuts import render |
URL-CBV:写法
- cbv写法 django会自动定位到 请求到方法,不用自己单独的去判断
post、get…

from django.urls import path |
from django.shortcuts import render |
URL-CBV:取值
from django.urls import path, re_path |
from django.shortcuts import render |
ORM:配置
- 新建app:
python3 manage.py startapp app01 # 在当前目录下 创建一个叫 app01的文件夹 |
- settings 中组册app目录:
|
- models.py 配置:
from django.db import models |
- 读取models 生成相应本地配置:
1、>>> python3 manage.py makemigrations # 生成配置 |
返回数据:
from django.http import HttpResponse, JsonResponse |