Django框架

本文介绍了使用Django进行Web开发的基础步骤,包括设置静态文件路径、创建项目和APP、配置settings.py、路由、ORM操作数据库、使用ModelForm、模板继承、搜索与分页以及处理Excel文件上传的基本教程。
摘要由CSDN通过智能技术生成

基础操作

引入CSS

在setting文件中加入

STATIC_URL = 'static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static/'),
)

创建项目

"D:\PythonProject\python_design\venv\Scripts\django-admin.exe"  startproject mysite

基础介绍

创建APP

终端输入:

python manage.py startapp xxx

APP结构:

更改APP名称:

1、根据pycharm的提示更改所有与原app相关的名称。

2、在setting.py中更改static目录。通过在项目的根目录下运行以下命令即可:

mkdir static

或者是修改为本地目录后运行一遍,再修改为标准形式即可:

修改后运行:STATICFILES_DIRS = [ 'D:\\xxx\\xxx\\static', ]

修改回再次运行:STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]

快速编写:setting.py配置

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

编写url.pyl:

urlpatterns = [
    path('index/', views.index),
    path('user_add/', views.user_add),
]

编写view.py:

def index(request):
    return render(request, "index.html")


def user_add(request):
    return render(request, "user_add.html")

启动:

python manage.py runserver

django结构:

使用django建立网页需要:

​​​​​​{​% csrf_token %}

原理:在django中我们需要在templates的form中加入{%csrf_token%}这串内容,它的作用是当我们get表单页面时,服务器返回页面的同时也会向前端返回一串随机字符,post提交时服务器会验证这串字符来确保用户是在服务端返回的表单页面中提交的数据,防止有人通过例如jquery脚本向某个url不断提交数据,是一种数据提交的验证机制。

ORM功能:操作数据库的表,无法创建数据库

创建数据表:

修改models.py文件,增加sql中表的内容相关代码。

class UserInfo(models.Model):
    name = models.CharField(max_length=20)
    comment = models.TextField()

执行命令:

python manage.py makemigrations
python manage.py migrate 

如果需要再创建modle,运行代码就可以。

orm连接数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'database_name',
        'USER': 'root',
        'PASSWORD': 'root123',
        'HOST': '127.0.0.1',
        'PORT': 3306,
    }
}

注释掉不想要的行

class UserInfo(models.Model):
    name = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    # age = models.IntegerField()

 运行:

python manage.py makemigrations
python manage.py migrate 

添加列:选择1,2两种方式添加默认值。

python manage.py makemigrations

下图是手动输入默认值(选择2,回车后会退出,再写入下面的默认值)

之后再运行下面代码,就会将新的列插入进来:python manage.py migrate 

允许为空

class UserInfo(models.Model):
    name = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    age = models.IntegerField()
    # 新增列
    size = models.IntegerField(default=2)
    # 允许为空
    data = models.IntegerField(null=True, blank=True)

增添数据:

class UserInfo(models.Model):
    name = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    age = models.IntegerField(default=2)
    
class Department(models.Model):
    title = models.CharField(max_length=16)
 
 
# 新建数据
# 本质:insert into app01_department(title)values()
Department.objects.create(title="销售部")
 
 
UserInfo.objects.create(name="bruce",password="123",age="18")

在Django建url访问操作数据表

新增url(编辑urls.py文件)

from django.urls import path
from app01 import views
 
urlpatterns = [
    # path('admin/', admin.site.urls),
    # path('index_app/', views.index_app),
    # path('user_list/', views.user_list),
    # path('tpl/', views.tpl),
    # path('something/', views.something),
    # path('login/', views.login),
    path('orm/', views.orm),
]

编辑views.py

from app01.models import Department
 
 
def orm(request):
    # 新建数据
    Department.objects.create(title="123")
 
 
    return HttpResponse("成功")

删除数据(还是在views.py文件中)

def orm(request):
    # 新建数据
    Department.objects.create(title="123")
 
    #删除数据
    Department.objects.filter(id=2).delete()
    # 全部删除
    Department.objects.all().delete()
    return HttpResponse("成功")

获取特定数据

UserInfo.objects.filter(name = 'ETF回本之路').values('id')

获取所有数据

UserInfo.objects.all()

Django案例

思路

写URL:

path('web/', views.web),

写函数:

def web(request):

render:属于渲染函数!!!

Django模板继承

模板:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style>
       模板自己的style
    </style>
    <link rel="stylesheet" href="/static/plugins/bootstrap-5.3.0/css/bootstrap.css">
</head>

<body>
<div class="header" >
   模板自己的header
</div>
<div>
    {%block content%} {%endblock%}
</div>

</body>
</html>

使用模板:

{%extends "layout.html"%}

{%block css%}
    <style></style>
    <link>
{%endblock%}

{%block content%}
    <div>插入需要的html即可</div>
{%endblock%}

{%block js%}
    <script></script>
{%endblock%}

Django的Models组件

创建数据库的,用于models.py

class UserInfo(models.Model):
    name = models.CharField()
    uid = models.IntegerField()
    comment = models.TextField()

Django的ModelsForm组件

用于view.py中的字段代替

models.py文件

from django.db import models

# Create your models here.
class Department(models.Model):
    """部门表"""
    title = models.CharField(max_length=32, verbose_name='标题')


class UserInfo(models.Model):
    """员工表"""
    name = models.CharField(max_length=16, verbose_name="姓名")
    password = models.CharField(max_length=64, verbose_name="密码")
    age = models.IntegerField(verbose_name="年龄")
    account = models.DecimalField(verbose_name="账户余额", max_digits=10, decimal_places=2, default=0)
    create_time = models.DateTimeField(verbose_name="入职时间")
    depart = models.ForeignKey(to="Department", to_field="id", on_delete=models.CASCADE, verbose_name="部门")
    
    gender_choices = (
        (1, "男"),
        (2, "女"),
    )
    gender = models.SmallIntegerField(choices=gender_choices,verbose_name="性别")

views.py文件

class MyForm(ModelForm):
	class Meta:
		field = ["name", "password", "age"]
 
def user_add(request):
	if request.method == "GET":
	form = MyForm()
		return render(request, "user_add.html", {"form": form})

HTML中使用:

<form method="post">
	{{ form.id }}
    {{ form.Uid }}
	{{ form.name }}
	{{ form.comment }}
</form>

Django搜索

搜索特定条件

UserInfo.objects.filter(id=uid)

大于

UserInfo.objects.filter(id__gt=uid)

小于

UserInfo.objects.filter(id__lt=uid)

字符串以xxx开头或结尾查找或包含的查找:

UserInfo.objects.filter(id__startwith=xxx)
UserInfo.objects.filter(id__endwith=xxx)
UserInfo.objects.filter(id__icontent=xxx)

多条件搜索:

from django.db.models import Q
message = UserInfo.object.filter(Q(id__icontent=xxx) | Q(name__icontent=xxx)

Django分页:调用分页组件,分别在view.py和HTML中操作即可

视图函数中:

1.筛选数据:

queryset = UserInfo.objects.all().order_by("xxx")

2.实例化分页类的对象:

page_object = Pagination(request,queryset)

context = {
        "queryset": page_object.page_queryset,  # 分页的数据
        "page_string": page_object.html(),  # 页码
    }

3.输出结果:

return render(request,"xxx.html",context)

HTML中:

<ul class="pagination justify-content-center">
    {{page_string}}
</ul>

Django上传excel文件到Mysql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值