小白也能学会的哦!
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的基本创建和使用方法了
第一次写难免有些不足,希望大家能够支持!!!