Django最基本创建使用流程

小白也能学会的哦!

1.创建项目
打开在这里插入图片描述
首先打开cmd,找到对应的文件夹位置
输入django-admin startproject project
就会自动生成一个名叫project的文件夹
在这里插入图片描述
在cmd下面进入project的文件夹
输入tree . /F查看project文件夹的树状层级
在这里插入图片描述

manage.py        #一个命令行工具,可以使我们用多种方式对django项目进行交互

project目录
1. __init__.py 一个空文件,可以将其文件夹看作python包
2.settings.py 项目的配置文件
3.urls.py 项目的URL声明
4. wsgi.py 项目与WSGI兼容的web服务器入口
5.asgi.py 类似wsgi.py

2.更改setting的数据库配置
首先安装mysqlclient
更改settings.py的代码

#改前代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
#因为django自带的是sqlite
#
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'student',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '3306'
    }
}
#要自己创建一个student的数据库

3.创建应用
一个项目中可以创建多个应用,每个应用进行一种业务处理

在cmd中找到project的目录,并输入python manage.py startapp myApp
在这里插入图片描述
就会生成一个myApp的文件夹
在这里插入图片描述
在这里插入图片描述
myApp目录说明
1.admin.py 站点配置
2. models.py 模型
3. views.py 视图

4.创建应用
settings.py文件中,将myApp应用加入到INSTALLED_APPS选项中

#改前代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
#改后代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myApp'
]

5.定义模型
概述:有一个数据表,就对应有一个模型

myApp.py下面的models.py文件进行创建

from django.db import models
#必须导入models

# Create your models here.

#创建类(一个类对应一张数据表)
class Grade(models.Model):
    gname = models.CharField(max_length=20)
    gdate = models.DateField()
    ggirlnum = models.IntegerField()
    gboynum = models.IntegerField()
    isDelete = models.BooleanField(default=False)

class Student(models.Model):
    sname = models.CharField(max_length=20)
    sgender = models.BooleanField(default=True)
    sage = models.IntegerField()
    scontend = models.CharField(max_length=20)
    isDelete = models.BooleanField(default=False)
    #关联外键
    sgrade = models.ForeignKey("Grade",on_delete=models.CASCADE)

6.生成数据表
在cmd下的project目录输入python manage.py makemigrations
在这里插入图片描述
执行迁移文件
然后就会在migrations文件夹下面生成一个0001_initial.py

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Grade',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('gname', models.CharField(max_length=20)),
                ('gdate', models.DateField()),
                ('ggirlnum', models.IntegerField()),
                ('gboynum', models.IntegerField()),
                ('isDelete', models.BooleanField(default=False)),
            ],
        ),
        migrations.CreateModel(
            name='Student',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('sname', models.CharField(max_length=20)),
                ('sgender', models.BooleanField(default=True)),
                ('sage', models.IntegerField()),
                ('scontend', models.CharField(max_length=20)),
                ('isDelete', models.BooleanField(default=False)),
                ('sgrade', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='myApp.Grade')),
            ],
        ),
    ]

此时数据库未含有相应的表

执行迁移
在cmd下的project目录输入python manage.py migrate
在这里插入图片描述
此时数据库中已经创建了对应的两张表

7.测试数据操作
在cmd下的project目录输入python manage.py shell

并且输入以下代码

from myApp.models import Grade, Student
from django.utils import timezone
from datetime import *

添加数据

grade1 =Grade()
grade1.gname = "class01"
grade1.gdate = datetime(year=2020,month=7,day=22)
grade1.ggirlnum = 20
grade1.gboynum = 30
grade1.save()  #特别重要,如果没有,则不能向数据表存入数据

查询数据

#类名.objects.all()
Grade.objects.all()   #查询所有数据

#类名.objects.get(pk=num)
Grade.objects.get(pk=1)  #查询第几条数据

修改数据

grade2 = Grade.objects.get(pk=2)  #grade2指向其所对应的对象
grade2.ggirlnum = 30  #进行修改
grade2.save()	#执行修改

删除数据

grade2 = Grade.objects.get(pk=2)
grade2.delete()
#因为数据库的id自动递增,所以pk=2就查不到了

关联对象

grade1 = Grade.objects.get(pk=1)

stu1 = Student()
stu1.sname = "小红"
stu1.sgender = "False"
stu1.sage = 18
stu1.scontend = "我叫小红"
stu1.sgrade = grade1  #关联对象!!!
stu1.save()

获取关联对象的集合

grade1 = Grade.objects.get(pk=1)

#对象名.关联类名小写_set.all()
grade1.student_set.all()

直接创建grade1的学生

stu2=grade1.student_set.create(sname=u"小黑",sgender=True,sage=19,scontend=u"hello everyone")
stu2.save()
#u转码

8.启动服务器
在cmd下的project目录输入python manage.py runserver
即可打开http://127.0.0.1:8000/

9.Admin站点管理
作用:负责添加,修改,删除内容
settings.py文件默认添加好的

INSTALLED_APPS = [
    'django.contrib.admin',		#admin
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myApp'
]

在cmd下的project目录输入python manage.py createsuperuser
进行创建一个超级账号

管理数据表
修改admin.py

from django.contrib import admin
from .models import Grade,Student

# Register your models here.

class StudentInfo(admin.TabularInline):  #StackedInline  创建样式不同
    #用于创建Grade时能够在其创建两个Student
    model = Student
    extra = 2

class GradeAdmin(admin.ModelAdmin):
    #列表页属性
    list_display = ['id','gname','ggirlnum','gboynum','gdate','isDelete']  #显示字段
    list_filter = ['gname']  #过滤字段
    search_fields = ['gname','ggirlnum']   #搜索字段
    list_per_page = 5      #分页

    #添加,修改页属性
    # fields = ['gname','ggirlnum','gboynum','gdate','isDelete']   #属性的先后顺序
    fieldsets = [("num",{"fields":['ggirlnum','gboynum']}),         #属性分组,不能和fields同时使用
                ("base",{"fields":['gname','gdate','isDelete']})]
    
    inlines = [StudentInfo]   #调用StudentInfo

@admin.register(Student)   #使用装饰器完成注册
class StudentAdmin(admin.ModelAdmin):
    
    def gender(self):
        if self.sgender :
            return '男'
        else:
            return '女'
    #设置页面列的名称
    gender.short_description = '性别'

    list_display = ['id','sname',gender,'sage','scontend','isDelete']
    list_per_page = 10
    
    #执行动作的位置
    # actions_on_bottom = True
    # actions_on_top = True

admin.site.register(Grade,GradeAdmin)
# admin.site.register(Student,StudentAdmin)

10.视图的基本使用
在django中,视图对web请求进行回应
视图就是一个python函数,在views.py文件中定义
更改views.py

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def index(request):
    return HttpResponse("hello world")

def detail(request,num):
    return HttpResponse("num is %s"%num)

并且找到urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('myApp.urls'))  #添加myApp文件夹下的urls.py
]

在myApp文件夹下的urls.py

from django.urls import path,include,re_path

from . import views

urlpatterns = [
    path('',views.index),
    re_path(r'^(\d+)/$',views.detail)  #path('<int:num>/',views.detail)
]

即可实现视图的展示

11.模板的基本使用
概述:模板是html页面,可以根据视图传递过来的数据进行填充

创建templates目录,在目录下创建对应项目的模板目录(project\templates\myApp)

配置模板路径
修改settings.py的TEMPLATES

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(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',
            ],
        },
    },
]

展示班级信息
1.写grades.html模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>班级信息</title>
</head>
<body>
    <h1>班级列表信息</h1>
    <ul>
        {%for grade in grades%}
        <li>
            <a href="{{grade.id}}">{{grade.gname}}</a>
        </li>
        {% endfor %}
    </ul>
</body>
</html>

2.定义视图
views.py

from .models import Grade,Student
def grades(request):
    #去模型里取数据
    gradelist = Grade.objects.all()
    #将数据传递给模板,模板在渲染页面,将渲染好的页面返回给浏览器
    return render(request,'myApp/grades.html',{"grades":gradelist})

3.配置url
在myApp下的urls.py

from django.urls import path,include,re_path

from . import views

urlpatterns = [
    path('',views.index),
    re_path(r'^(\d+)/$',views.detail),  #path('<int:num>/',views.detail)
    path('grades/',views.grades)		#配置的grades
]

添加students.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
    <h1>学生列表信息</h1>
    <ul>
        {%for student in students%}
        <li>
            姓名:{{student.sname}}   年龄:{{student.sage}}   性别:{%if student.sgender%}{%else%}{% endif %}   介绍:{{student.scontend}}
        </li>
        {% endfor %}
    </ul>
</body>
</html>

views.py

def students(request):
    studentlist = Student.objects.all()
    return render(request,'myApp/students.html',{"students":studentlist})

def gradeStudents(request,num):
    grade = Grade.objects.get(pk=num)
    studentlist = grade.student_set.all()
    return render(request,'myApp/students.html',{"students":studentlist})

urls.py

from django.urls import path,include,re_path

from . import views

urlpatterns = [
    path('',views.index),
    re_path(r'^(\d+)/$',views.detail),  #path('<int:num>/',views.detail)
    path('grades/',views.grades),
    path('students/',views.students),
    path('grades/<int:num>/',views.gradeStudents)
]

以上就是Django的基本创建和使用方法了

第一次写难免有些不足,希望大家能够支持!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值