Django框架
一、目录结构
manage.py 管理项目的命令行工具,启动项目、生成app、执行数据迁移等 settings.py 项目配置文件,注册app、配置模型(数据库)等 asgi.py django的服务器,异步接受网络请求 wsgi.py django的服务器,同步接受网络请求 urls.py 路由配置文件,将URL匹配到对应的视图函数(处理请求的函数) templates目录 存放模板文件,即HTML文件
二、环境部署
2.1 创建Django项目
-
下载Django框架
pip install django -i https://pypi.douban.com/simple -
PyCharm创建Django项目
2.2 连接数据库-MySQL
-
运行MySQL+创建一个数据库(django_pro)
-
pycharm中,连接数据库
-
在项目的配置文件(settings.py)中,配置数据库;
DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_pro', 'USER': 'root', 'PASSWORD': '123.com', 'HOST': '127.0.0.1', 'PORT': 3306, } } -
将数据迁移到数据库(django_pro)中
python manage.py makemigrations 创建迁移文件 python manage.py migrate 执行迁移命令
三、开发流程
3.1 APP注册
-
生成app
- 命令:python manage.py startapp AppName - 目录结构 - __init__.py APP初始化文件,对某些数据进行初始设置 - admin.py 后台管理,管理员(可能看不懂代码)通过该页面可以直接操纵数据库中的表 - apps.py APP的配置文件,定义了该app的名称等 - models.py 模型文件,编写操纵数据库的代码 - tests.py 对app做一些测试 - views.py 视图文件,编写视图函数(处理请求)的地方 -
注册app
在项目的配置文件(settings.py)的INSTALLED_APPS列表中,添加app的名称
3.2 数据迁移
-
运行MySQL,并在项目中连接上MySQL
-
生成迁移文件
python manage.py makemigrations -
执行迁移命令
python manage.py migrate
3.3 路由配置
-
在app的视图文件(views.py)中,定义视图函数
-
采用跟路由的方式进行配置:在项目的路由文件(urls.py)中,将路由添加到urlpatterns列表
- path(url路径,对应的视图函数) - url路径:客户端(浏览器)会自动在url的后面加上‘/’,因此,路由中也要一‘/’结尾;一个视图函数 可以对应多个不同的路由;网站首页应为空和index两个路由;url路径中可以定义参数,该参数会被传 入其对应的视图函数中; - 视图函数:不要忘记导包
3.4 模板文件
- 在项目的templates目录中(如果在app中创建了templates模板目录,需要在项目的配置文件中进行路径配置),创建HTML文件
- 在某个视图函数中,进行指定(即return),该视图函数与模板文件应该具有这样的关系:客户端请求该视图函数就能看到这个模板文件
四、示例
4.1 djangoPro
4.1.1 创建项目
-
新建项目
-
创建Django项目
-
连接数据库
-
app注册
4.1.2 创建首页
-
在templates目录中,创建index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body style="background-color: slategrey"> <div style="display: inline-block"> <img style="margin-left: 30px;" src="https://i2.hdslb.com/bfs/archive/7f9cd6bd48b0e1e84ca5491d0a410d93bebaace7.png" alt="" width="350px"> <img style="margin-left: 30px;" src="https://img0.baidu.com/it/u=3901441618,621808000&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=1200" alt="" width="230px"> <img style="margin-left: 30px;" src="https://img0.baidu.com/it/u=1518200957,2910210326&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=500" alt="" width="350px"> </div> <h1 style="color: gold; background-color: black; text-align: center">欢迎来到Django站点,请继续你的django开发</h1> <h1 style="color: gold; background-color: black; text-align: center">欢迎来到Django站点,请继续你的django开发</h1> <h1 style="color: gold; background-color: black; text-align: center">欢迎来到Django站点,请继续你的django开发</h1> </body> </html> -
在app01的views.py中,定义index函数
def index(request): return render(request, "index.html") -
在项目的urls.py中,配置首页路由
from django.contrib import admin from django.urls import path import app01.views urlpatterns = [ # 默认配置 path('admin/', admin.site.urls), # app01 path('', app01.views.index), path('index/', app01.views.index), ] -
启动服务器
python manage.py runserver
4.1.3 创建模型
-
在app01的models.py中,创建表结构
from django.db import models # 一个类就是一张表 class UserInfo(models.Model): # 创建name、sex、age三个字段 name = models.CharField(max_length=30) sex = models.CharField(max_length=30) age = models.IntegerField(defalut=18) -
生成迁移文件
-
执行迁移命令
-
在app01的后台管理文件(admin.py)中,进行后台注册
from django.contrib import admin from app01 import models # Register your models here. admin.site.register(models.UserInfo) -
创建后台管理员账号
-
启动服务器,访问后台
-
添加数据
4.1.4 创建模板
-
在templates目录中,创建userlist.html
-
创建视图函数userList
from django.shortcuts import render from app01.models import * # Create your views here. def index(request): return render(request, "index.html") def userList(request): users = UserInfo.objects.all() # 以字典形式返回数据 return render(request, "userlist.html", {"users":users}) -
在模板中接收视图函数的返回
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户列表</title> </head> <body> <ul> {% for user in users %} <li> 姓名:{{ user.name }} 性别:{{ user.sex }} 年龄:{{ user.age }} </li> {% endfor %} </ul> </body> </html> -
配置路由"userlist/"
-
启动服务器,访问userlist页面
4.1.5 路由匹配参数
-
urls.py
""" URL configuration for djangoPro project. The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/4.2/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path import app01.views urlpatterns = [ path('admin/', admin.site.urls), # app01 path('', app01.views.index), path('index/', app01.views.index), path('userlist/', app01.views.userList), path('getParams/<int:id>/', app01.views.getParams), ] -
views.py
from django.shortcuts import render from app01.models import * # Create your views here. def index(request): return render(request, "index.html") def userList(request): users = UserInfo.objects.all() return render(request, "userlist.html", {"users": users}) def getParams(request, id): return render(request, "getPrams.html", {"id": id}) -
getParams.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>匹配参数</title> </head> <body> 您输入的参数是<span style="font-size: 22px; color: gold; background-color: black;">{{ id }}</span> </body> </html>
4.1.6 request对象
https://blog.csdn.net/weixin_43988680/article/details/124654798
-
视图函数
def requests(request): # 常用值 results = [ f"路径:{request.path}", f"方法:{request.method}", f"GET:{request.GET}", f"请求体:{request.body}", f"META:{request.META}", f"session: {request.session}", f"cookies: {request.COOKIES}", ] return render(request, "requests.html", {"results": results}) -
模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>request对象常用属性及方法</title> </head> <body> <ul> {% for result in results %} <li> {{ result }} </li> {% endfor %} <li> </li> </ul> </body> </html> -
路由配置
path('requests/', app01.views.requests)
4.1.7 models对象
-
视图函数
def modelObj(request): # 模型拿到的内容是每一行记录(的对象) users = list() for item in UserInfo.objects.all(): users.append(item) numbers = UserInfo.objects.count() return render(request, "models.html", {"users": users, "numbers": numbers}) -
模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模型对象常用方法</title> </head> <body> 当前数据库中一共有{{ numbers}}条数据,如下所示 <ol> {% for user in users %} <li>{{ user.name }}</li> {% endfor %} </ol> </body> </html> -
路由配置
path('models/', app01.views.modelObj)
本文作者:尹少欣
本文链接:https://www.cnblogs.com/brankyeen/p/17811456.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?