Django(4)--mysql操作
目录
- 路由优化配置
- django--MySQL
- templates模板展示
- 展示学生
- 修改学生名字
- 删除学生
- mysql
- python manage.py shell
- 如何看待bug
- 表关系
- 级联
路由优化配置
- 拆分为多个应用。在app中创建自己的urls
- urlpatterns路由规则列表
- 在根urls中进行子路由的包含
- 子路由
- 根路由规则+子路由规则
djangoadmin startapp app02
- settings.py 注册新项目
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
'app02'
]
- app02创建urls.py
from django.conf.urls import url
from app02 import views
urlpatterns = [
url(r'^index/',views.index)
]
- app02/views.py
def index(request):
return HttpResponse('app02 index')
- bookmanager/urls.py
from django.conf.urls import url,include
from django.contrib import admin
#Include语法,来将单独的页面包含到当前模板页面中,路由转发
url(r'^app02/',include('app02.urls'))
django--MySQL
- models 使用了ORM技术
- object relational Mapping 对象关系映射
- 将业务逻辑进行了一个解耦合
- object.save()
- object.delete()
- 关系型数据库
- DDL
- 通过models定义实现,数据表的定义
- 数据操作
- 增删改查
- 存储
- save()
- 查询
- 查所有 objects.all()
- 查单个 objects.get(pk=2)
- 更新
- 基于查询的
- 查好的对象,修改属性,然后save() #基于主键,主键存在就是更新,主键不存在就是创建
- 删除
- 基于查询的
- 调用delete()
- models.py
from django.db import models
class Student(models.Model):#继承Django的models
s_name = models.CharField(max_length=16)
s_age = models.IntegerField(default=1) #default=1默认值
- python命令,将模块刷到数据库
#生成迁移文件
E:\python_data\py27\bookmanager>python manage.py makemigrations
Migrations for 'app01':
app01\migrations\0003_auto_20191121_1645.py
- Create model Student
- Delete model test
#迁移
E:\python_data\py27\bookmanager>python manage.py migrate
Operations to perform:
Apply all migrations: admin, app01, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
....
- app01/urls.py
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index/',views.index),
url(r'addstudent/',views.add_student)
]
- app01/views.py
from django.shortcuts import render,HttpResponse,redirect
from app01 import models
from app01.models import Student
def add_student(request):
student = Student()
student.s_name='jrrey'
student.save()
return HttpResponse('Add successfully')
-
到数据库刷新查看,可以看见学生已经添加
-
生成新的随机人员
def add_student(request):
student = Student()
student.s_name= 'jerry%d' % random.randrange(100)
student.save()
return HttpResponse('add successfully %s' % student.s_name)
访问 http://127.0.0.1:8000/app01/addstudent/
templates模板展示
- templates两种配置
- 第一种在app01中进行模板配置,app01/templatesm目录
- 如果想让代码自动提示,将文件夹标记为模板文件夹
- 在项目目录中创建模板配置(开发中使用,便于模板继承)
- 在项目中创建templates并标记
- 需要在settings中进行注册
- bookmanager\templates\student_list.html
student_list
hello
{{ hobby }}
展示学生
- 展示学生列表1
app01/urls.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
#出版社的展示
# url(r'^publishare_list/',views.publishare_list)
# url()
url(r'^login/',views.login),
url(r'index/',views.index),
url(r'addstudent/',views.add_student),
url(r'getstudent/',views.get_student),
]
- app01/views.py
def get_student(request):
students = Student.objects.all() #orm为提供学生操作的一个入口
for student in students:
print(student.s_name)
return HttpResponse('student list')
- 访问 http://127.0.0.1:8000/app01/getstudent/
- 展示学生列表2
def get_student(request):
students = Student.objects.all() #orm为提供学生操作的一个入口
for student in students:
print(student.s_name)
context = {
"hobby":"play games",
"eat":"meat" #如果没在HTML中定义就不会刷出来
} #往模板中传的数据,是个字典
return render(request,'student_list.html',context=context)
student_list
hello
{{ hobby }}
{{ eat }}
def get_student(request):
students = Student.objects.all() #orm为提供学生操作的一个入口
for student in students:
print(student.s_name)
context = {
"hobby":"play games",
"eat":"meat", #如果没在HTML中定义就不会刷出来
"students":students
} #往模板中传的数据,是个字典
return render(request,'student_list.html',context=context)
student list
{% for student in students %}
- {{ student.s_name }}
{% endfor %}