创建django项目
在小黑框
django-admin startproject 项目名
把项目拖到python文件中
创建子应用
python manage.py startapp 子应用名
配置setting
注册子应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
注册模板页面
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',
],
},
},
]
数据库链接
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST':'localhost',
'PORT':3306,
'USER':'root',
'PASSWORD':'123456789',
'NAME':'day7hdk2',
}
}
语言
LANGUAGE_CODE = 'zh-Hans'
时区
TIME_ZONE = 'Asia/Shanghai'
python中安装数据库 init
import pymysql
pymysql.install_as_MySQLdb()
创建模型类
from django.db import models
# Create your models here.
# 5. 新建一个干净项目,项目名为day7+姓名首拼+2
# 6. 编写种类Kind模型类,由种类名称kind_name组成,并自己添加3条数据
# 7. 编写商品Good模型类,商品名good_name、单价price、数量num、种类kind(外键),并自己添加测试数据
class Kind(models.Model):
kind_name=models.CharField(max_length=10,verbose_name='种类名称')
class Meta:
verbose_name='种类表'
verbose_name_plural=verbose_name
db_table='kind'
def __str__(self):
return self.kind_name
class Good(models.Model):
good_name=models.CharField(max_length=10,verbose_name='商品名')
price=models.IntegerField(default=0,verbose_name='单价')
num=models.IntegerField(default=0,verbose_name='数量')
kind=models.ForeignKey(to=Kind,on_delete=models.CASCADE,verbose_name='种类')
class Meta:
verbose_name='商品表'
verbose_name_plural=verbose_name
db_table='good'
def __str__(self):
return self.good_name
在admin中注册模型类
from django.contrib import admin
from myapp.models import Kind
from myapp.models import Good
# Register your models here.
admin.site.register(Kind)
admin.site.register(Good)
迁移文件
python manage.py makemigrations
python manage.py migrate
创建超级用户
python manage.py createsuperuser
在子应用中新建urls
from django.contrib import admin
from django.urls import path,include
from myapp import urls
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(urls))
]
from django.urls import path
from myapp import views
urlpatterns = [
path('kind/',views.kind.as_view()),
path('good/<int:id>',views.good.as_view()),
path('add/',views.add.as_view()),
path('del/<int:id>/',views.delete.as_view()),
path('select/',views.select.as_view()),
path('update/<int:id>',views.update.as_view()),
]
然后在View中输出
from django.shortcuts import render,redirect
from django.views import View
from django.http import HttpResponse
from myapp.models import Kind
from myapp.models import Good
# Create your views here.
# 主页面功能:
# 1.展示所有的种类信息
class kind(View):
def get(self,request):
data=Kind.objects.all()
return render(request,'kind.html',{'kind':data})
# 2.可以搜索商品信息
class select(View):
def get(self,request):
name=request.GET.get('good_name')
try:
data=Good.objects.get(good_name__contains=name)
except Exception as e:
print(e)
return HttpResponse("数据查询失败")
return HttpResponse(f"{data.good_name},{data.price},{data.num},{data.kind}")
# 3.可以新增商品信息
class add(View):
def post(self,request):
good_name=request.POST.get('good_name')
price = request.POST.get('price')
num = request.POST.get('num')
kind = request.POST.get('kind')
try:
Good.objects.create(
good_name=good_name,
price=price,
num=num,
# 注意这是外键需要用id
kind_id=kind,
)
except Exception as e:
print(e)
return HttpResponse("数据添加失败")
return redirect('/kind/')
# 4.点击种类名可以进入到指定种类下,展示对应种类的商品信息,并按照价格排序
class good(View):
def get(self,request,id):
data=Good.objects.filter(kind_id=id)
return render(request,'good.html',{'good':data})
# 商品信息页面功能:
# 1. 商品信息的修改
class update(View):
def get(self,request,id):
data=Good.objects.get(id=id)
return render(request,'index.html',{'goods':data})
def post(self, request, id):
good_name = request.POST.get('good_name')
price = request.POST.get('price')
num = request.POST.get('num')
kind = request.POST.get('kind')
try:
Good.objects.filter(id=id).update(
good_name=good_name,
price=price,
num=num,
kind_id=kind,
)
except Exception as e:
print(e)
return HttpResponse("修改失败")
return redirect('/kind/')
# 2. 商品信息的删除
class delete(View):
def get(self,request,id):
Good.objects.filter(id=id).delete()
return redirect('/kind/')
view中涉及的good.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<tr>
<th>编号</th>
<th>商品名</th>
<th>单价</th>
<th>数量</th>
<th>种类</th>
<th>操作</th>
</tr>
{% for foo in good %}
<tr>
<th>{{ foo.id }}</th>
<th>{{ foo.good_name }}</th>
<th>{{ foo.price }}</th>
<th>{{ foo.num }}</th>
<th>{{ foo.kind }}</th>
<th>
<a href="/del/{{ foo.id }}/" methods="get">
删除
</a>
<a href="/update/{{ foo.id }}/" methods="get">
修改
</a>
</th>
</tr>
{% endfor %}
</table>
<form action="/add/" method="post">
商品:<input type="text" name="good_name"><br>
单价:<input type="text" name="price"><br>
数量:<input type="text" name="num"><br>
种类:<input type="text" name="kind"><br>
<input type="submit" value="添加"><br>
</form>
<form action="/select/" method="get">
商品名称:<input type="text" name="good_name">
<input type="submit" value="查询">
</form>
</body>
</html>
view中涉及的kind.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<tr>
<th>编号</th>
<th>种类名称</th>
</tr>
{% for foo in kind %}
<tr>
<th>{{ foo.id }}</th>
<th>
<a href="/good/{{ foo.id }}">{{ foo.kind_name }}</a>
</th>
</tr>
{% endfor %}
</table>
</body>
</html>
view中涉及的index.html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
编号:<input type="text" name="id" value="goods.id">
商品名:<input type="text" name="good_name" value="goods.good_name">
单价:<input type="text" name="price" value="goods.price">
数量:<input type="text" name="num" value="goods.num">
种类:<input type="text" name="kind_id" value="goods.kind_id">
</form>
</body>
</html>