python之Django创建项目

安装Django

查看是否安装python

python --version
或
python -v 

命令行安装Django

//安装Django
pip install django
//查看django版本
pip show django
C:\Users\wangcheng>pip show django
Name: Django
Version: 5.1.3
Summary: A high-level Python web framework that encourages rapid development and clean, pragmatic design.
Home-page: https://www.djangoproject.com/
Author:
Author-email: Django Software Foundation <foundation@djangoproject.com>
License: BSD-3-Clause
Location: C:\Users\wangcheng\AppData\Roaming\Python\Python312\site-packages
Requires: asgiref, sqlparse, tzdata
Required-by:

配置环境变量

  • 使用pip show django 可以查看django安装路径
  • 进入Django安装路径:C:\Users\wangcheng\AppData\Roaming\Python\Python312\site-packages
  • 将上一层级Scripts及django配置到path中

配置Scripts

Scripts:为django安装路径下的Scripts文件夹,而不是python安装路径中的Scripts文件夹
Scripts

C:\Users\wangcheng\AppData\Roaming\Python\Python312\Scripts

配置django

在这里插入图片描述

C:\Users\wangcheng\AppData\Roaming\Python\Python312\site-packages\django

创建Django项目

django-admin startproject HelloWorld

django项目

  • HelloWorld: 项目的容器。
  • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
  • HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  • HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
  • HelloWorld/settings.py: 该 Django 项目的设置/配置。
  • HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
  • HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

启动项目

cd HelloWorld
python manage.py runserver 0.0.0.0:8099

项目启动

视图和url配置

在HelloWorld/HelloWorld目录下创建view.py

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world !")

在HelloWorld/HelloWorld/urls.py文件中配置跳转路径

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path("",views.hello,name="hello"),
]
path()函数

path()函数语法格式

path(route, view, kwargs=None, name=None)

path() 可以接收四个参数,分别是两个必选参数:route、view 和两个可选参数:kwargs、name。

  • route: 字符串,定义 URL 的路径部分。可以包含变量,例如 int:my_variable,以从 URL 中捕获参数并将其传递给视图函数。
  • view: 视图函数,处理与给定路由匹配的请求。可以是一个函数或一个基于类的视图。
  • kwargs(可选): 一个字典,包含传递给视图函数的额外关键字参数。
  • name(可选): 为 URL 路由指定一个唯一的名称,以便在代码的其他地方引用它。这对于在模板中生成 URL 或在代码中进行重定向等操作非常有用。
re_path()函数

re_path() 方法来兼容 1.x 版本中的 url() 方法,一些正则表达式的规则也可以通过 re_path() 来实现 。

from django.urls import include, re_path

urlpatterns = [
   re_path(r'^index/$', views.index, name='index'),
   re_path(r'^bio/(?P<username>\w+)/$', views.bio, name='bio'),
   re_path(r'^weblog/', include('blog.urls')),
   ...
]

使用模版

与manage.py同级创建templates目录,里面可以放html文件模版

创建模版html文件

hello.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8"/>
    </head>
    <body>
        <h1>{{hello}}</h1>
    </body>
</html>

修改settings.py中的TEMPLATES

DIRS中添加[Path(BASE_DIR,‘templates’)]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [Path(BASE_DIR,'templates')], #修改位置
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

如果在TEMPLATES设置了此项会先查找根目录下的templates文件,然后根据app注册顺序逐个去找app目录下templates文件夹
如果不设置会先根据app注册顺序逐个查找app目录下的templates文件夹

配置静态文件

静态文件放在templates同级的static目录下

在html文件中引入静态文件

可以使用相对路径 /static/img/1.png
可以使用load static引入
  • html文件顶部
{% load static %}
  • 需要引入的地方
{% static '文件路径'%}

编写views.py

from django.http import HttpResponse
from django.shortcuts import render

def hello(request):
    return HttpResponse("Hello world !")

def index(request):
    context = {}
    context['hello'] = 'Hello world Everyone!'
    return render(request,'hello.html',context)

修改urls.py

from django.contrib import admin
from django.urls import path
from . import views
from . import views,testdb

urlpatterns = [
    path('admin/', admin.site.urls),
    path("",views.hello,name="hello"),
    path("hello/",views.index),
    path("testdb/",testdb.testdb),
    path("selectTest/",testdb.testdb_select),
    path("updateTest/",testdb.testdb_update),
    path("delTest/",testdb.testdb_del),
]

至此Django项目已经创建完成,启动项目,访问8099端口,可以查看项目。
后面会继续进行连接数据库等相关知识

创建模型

python manage.py startapp app01
或者
django-admin startapp app01

在这里插入图片描述

  • apps.py 固定,不用动,启动文件
  • admin.py 固定,不用动,django自带的admin管理页面
  • migrations文件 固定,不用动,数据库变更记录
  • tests.py 做单元测试
  • models.py 重要 数据库模型
  • views.pyg 重要 视图函数

注册APP

在 settings.py中注册app
根据模型项目名->文件名->类名进行注册,写成:项目名.文件名.类名 即:app01.apps.App01Config

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config'
]

模板语法

本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理

函数

from django.shortcuts import render,HttpResponse

# Create your views here.
def tpl(request):
    name = "刘备"
    # 列表
    roles = ["管理员","CEO","保安"]
    # 字典
    user_info = {"name":"诸葛亮","salary":100000,"role":"CTO"}
    # 列表套字典
    data_list = [
        {"name": "诸葛亮", "salary": 100000, "role": "CEO"},
        {"name": "关羽", "salary": 100000, "role": "CTO"},
        {"name": "张飞", "salary": 100000, "role": "COO"}
    ]
    return render(request,'tpl.html',{"n1":name,"n2":roles,"n3":user_info,"n4":data_list})

模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>模板语法学习</h1>
    <div>{{ n1 }}</div>
    <div>{{ n2 }}</div>
<!--    取列表中的数据-->
    <div>{{ n2.0 }}</div>
    <div>{{ n2.1 }}</div>
    <div>{{ n2.2 }}</div>
<!--for循环-->
    <div>
        {% for item in n2 %}
            <span>{{item}}</span>
        {% endfor %}
    </div>
    <hr/>
    {{n3}}
    {{n3.name}}
    {{n3.salary}}
    {{n3.role}}
    {% for k,v in n3.items %}
        <li>{{k}} = {{v}}</li>
    {% endfor %}
    <hr/>
    {{n4}}
    {{n4.1}}
    {{n4.1.name}}
    {{n4.1.salary}}
    {% for item in n4 %}
        <div>{{item.name}} {{item.salary}}</div>
    {% endfor %}
    <hr/>
    {% if n1 == "刘备" %}
        <h1>哒哒哒哒哒</h1>
    {% elif n1 == "xxx" %}
        <h1>啦啦啦啦啦</h1>
    {% else %}
        <h1>抖抖抖抖抖</h1>
    {% endif %}
</body>
</html>

模板加载过程

  1. 读取含有模板语法的HTML文件
  2. 内部进行渲染(模板语法执行并替换数据),最终得到只包含HTML标签的字符串
  3. 将渲染(替换)完成的字符串返还给用户浏览器

请求和响应

def something(request):
    # request 是一个对象,封装了用户通过浏览器发送过来的所有数据

    # 1.获取请求方式
    print(request.method)

    # 2.在URL上传递值
    print(request.GET)

    # 3.在请求体中提交数据
    print(request.POST)

    # 4.HttpResponse("返回内容") 返回字符串给请求者
    # HttpResponse("返回内容")

    # 5.读取HTML的内容 + 渲染(替换) -> 字符串,返回给请求者
    # render(request,'something.html',{"title":"来了"})

    # 6.让浏览器重定向到其他页面,返回一个链接,浏览器再去请求链接
    return redirect("https://www.baidu.com")

数据库操作

Mysql + pymsql

Django开发操作数据库

Django开发操作数据库更简单,提供了ORM框架

安装第三方模块

pip install mysqlclient

ORM操作表

ORM可以帮助我们做两件事:

  • 创建、修改、删除数据库中的表(不用写SQL语句),无法创建数据库
  • 操作表中的数据(不用写SQL语句)
  1. 创建数据库
CREATE DATABASE `mysite2` /*!40100 DEFAULT CHARACTER SET utf8mb3 */ /*!80016 DEFAULT ENCRYPTION='N' */;
  1. Django配置数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite2', # 数据库名字
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}
  1. 创建表模型
    在app中的models.py中创建
from django.db import models

# Create your models here.
class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

  1. 执行命令在数据库中创建表
python manage.py makemigrations

python manage.py migrate
  1. 在已有表中新增列时,由于已存在的列中可能已有数据,所以新增列必须要指定新增列对应的数据

    • 选项1. 手动输入一个值

    • 选项2 设置默认值

      age = models.IntegerField(default=2)
      
    • 允许为空

    data = models.IntegerField(null=True,blank=True)
    

以后在开发中如果想要对表结构进行调整,在models.py文件中操作类即可,修改好类执行命令进行同步

ORM操作表中的数据

def orm(request):
    # 新增表数据
    # DepartMent.objects.create(title="销售部")
    # DepartMent.objects.create(title="IT部")
    # DepartMent.objects.create(title="运营部")
    #
    # UserInfo.objects.create(name="刘备",password="999",age=30)
    # UserInfo.objects.create(name="关羽", password="666", age=29)
    # UserInfo.objects.create(name="张飞", password="888", age=29)

    # 删除表数据
    # UserInfo.objects.filter(id=3).delete()
    # DepartMent.objects.all().delete()

    # 获取数据
    # 结果可以理解成列表,里面是[行,行] QuerySet类型
    # data_list = UserInfo.objects.all()
    # for obj in data_list:
    #     print(obj.id,obj.name,obj.password,obj.age)
    # 使用filter虽然只有一条,但结果是QuerySet类型的列表
    # data_list = UserInfo.objects.filter(id=1)
    # 使用first()只获取一条数据
    # obj = UserInfo.objects.filter(id=1).first()

    ## 更新数据
    UserInfo.objects.filter(id=2).update(age=28)
    UserInfo.objects.filter(name="刘备").update(age=29)
    return HttpResponse("成功")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值