也许
  心绪永远
|

尹少欣

园龄:4年11个月粉丝:0关注:0

Django框架

一、目录结构

manage.py 管理项目的命令行工具,启动项目、生成app、执行数据迁移等
settings.py 项目配置文件,注册app、配置模型(数据库)等
asgi.py django的服务器,异步接受网络请求
wsgi.py django的服务器,同步接受网络请求
urls.py 路由配置文件,将URL匹配到对应的视图函数(处理请求的函数)
templates目录 存放模板文件,即HTML文件

二、环境部署

2.1 创建Django项目

  1. 下载Django框架

    pip install django -i https://pypi.douban.com/simple
  2. PyCharm创建Django项目

    image-20231031214601383

2.2 连接数据库-MySQL

  1. 运行MySQL+创建一个数据库(django_pro)

  2. pycharm中,连接数据库

    image-20231031214954308

    image-20231030220019771

  3. 在项目的配置文件(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,
    }
    }
  4. 将数据迁移到数据库(django_pro)中

    python manage.py makemigrations 创建迁移文件
    python manage.py migrate 执行迁移命令

    image-20231030220450779

三、开发流程

3.1 APP注册

  1. 生成app

    - 命令:python manage.py startapp AppName
    - 目录结构
    - __init__.py APP初始化文件,对某些数据进行初始设置
    - admin.py 后台管理,管理员(可能看不懂代码)通过该页面可以直接操纵数据库中的表
    - apps.py APP的配置文件,定义了该app的名称等
    - models.py 模型文件,编写操纵数据库的代码
    - tests.py 对app做一些测试
    - views.py 视图文件,编写视图函数(处理请求)的地方
  2. 注册app

    在项目的配置文件(settings.py)的INSTALLED_APPS列表中,添加app的名称

3.2 数据迁移

  1. 运行MySQL,并在项目中连接上MySQL

  2. 生成迁移文件

    python manage.py makemigrations
  3. 执行迁移命令

    python manage.py migrate

3.3 路由配置

  1. 在app的视图文件(views.py)中,定义视图函数

  2. 采用跟路由的方式进行配置:在项目的路由文件(urls.py)中,将路由添加到urlpatterns列表

    - path(url路径,对应的视图函数)
    - url路径:客户端(浏览器)会自动在url的后面加上‘/’,因此,路由中也要一‘/’结尾;一个视图函数 可以对应多个不同的路由;网站首页应为空和index两个路由;url路径中可以定义参数,该参数会被传 入其对应的视图函数中;
    - 视图函数:不要忘记导包

3.4 模板文件

  1. 在项目的templates目录中(如果在app中创建了templates模板目录,需要在项目的配置文件中进行路径配置),创建HTML文件
  2. 在某个视图函数中,进行指定(即return),该视图函数与模板文件应该具有这样的关系:客户端请求该视图函数就能看到这个模板文件

四、示例

4.1 djangoPro

4.1.1 创建项目

  1. 新建项目
    image-20231101205633720

  2. 创建Django项目

    image-20231101205749414

  3. 连接数据库

    image-20231101210042980

    image-20231101210403501

  4. app注册

    image-20231101210848349

    image-20231101210943733

4.1.2 创建首页

  1. 在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>
  2. 在app01的views.py中,定义index函数

    def index(request):
    return render(request, "index.html")
  3. 在项目的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),
    ]
  4. 启动服务器

    python manage.py runserver

    image-20231101215150213

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)
  • 生成迁移文件

    image-20231103092007802

  • 执行迁移命令

    image-20231103092106603

  • 在app01的后台管理文件(admin.py)中,进行后台注册

    from django.contrib import admin
    from app01 import models
    # Register your models here.
    admin.site.register(models.UserInfo)
  • 创建后台管理员账号

    image-20231103143956007

  • 启动服务器,访问后台

    image-20231103144123035

    image-20231103144314419

  • 添加数据

    image-20231103144443198

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 }}&nbsp;&nbsp;&nbsp;性别:{{ user.sex }}&nbsp;&nbsp;&nbsp;年龄:{{ user.age }}
    </li>
    {% endfor %}
    </ul>
    </body>
    </html>
  • 配置路由"userlist/"

  • 启动服务器,访问userlist页面

    image-20231103155057497

4.1.5 路由匹配参数

https://www.jb51.net/python/293397s0z.htm

  • 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 中国大陆许可协议进行许可。

posted @   尹少欣  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起