Python新手使用的Django架站的16堂课 — 第七章 ----练习
题目要求:
题目分析
数据表内容设计
制作步骤
进入python 虚拟环境
source venv_py2/bin/activate
django-admin startproject ch07www
mkdir templates
mkdir static
python manage.py startapp mysite
修改 ch07www / setting.py
-
添加 ‘mysite’,
-
修改templates 路径
os.path.join(BASE_DIR, ‘templates’)
STATICFILES_DIRS = [
os.path.join(BASE_DIR, ‘static’),
]
修改 ch07www / urls.py
from mysite import views
url(r’^$’, views.index),
修改 mysite / models.py
# _*_ encoding: utf-8 _*_
from django.db import models
from django.utils.safestring import mark_safe
class Maker(models.Model):
name = models.CharField(max_length=10)
country = models.CharField(max_length=10)
def __unicode__(self):
return self.name
class PModel(models.Model):
maker = models.ForeignKey(Maker, on_delete=models.CASCADE)
name = models.CharField(max_length=20)
url = models.URLField(default='http://i.imgur.com/Ous4iGB.png')
def __unicode__(self):
return self.name
class Product(models.Model):
pmodel = models.ForeignKey(PModel, on_delete=models.CASCADE, verbose_name='型号')
nickname = models.CharField(max_length=15, default='超值二手机', verbose_name='摘要')
description = models.TextField(default='暂无说明')
year = models.PositiveIntegerField(default=2016, verbose_name='出厂年份')
price = models.PositiveIntegerField(default=0, verbose_name='价格')
def __unicode__(self):
return self.nickname
class PPhoto(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
description = models.CharField(max_length=20, default='产品照片')
url = models.URLField(default='http://i.imgur.com/Z230eeq.png')
def __unicode__(self):
return self.description
修改 mysite / admin.py
#_*_ encoding:utf-8 _*_
from django.contrib import admin
from mysite import models
admin.site.register(models.Product)
admin.site.register(models.Maker)
admin.site.register(models.PModel)
admin.site.register(models.PPhoto)
执行命令
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
在templates目录下面,添加 index.html空文件
修改 mysite / views.py 文件
from django.shortcuts import render
from django.template.loader import get_template
from django.http import HttpResponse
from mysite import models
# Create your views here.
def index(request):
# products = models.Product.objects.all()
template = get_template('index.html')
html = template.render(locals())
return HttpResponse(html)
启动程序:
python manage.py runserver 192.168.99.218:8080
####### 进入页面:
Starting development server at http://192.168.99.218:8080/
http://192.168.99.218:8080/admin
开始添加数据
首先添加 maker
page 198
添加厂家
SONY — 日本
Nokia — 芬兰
Samsung — 三星
添加型号
添加产品
https://wx3.sinaimg.cn/mw690/8ba84be1ly1g6u7wtg2aej206w04wmxy.jpg
https://wx1.sinaimg.cn/mw690/8ba84be1ly1g6u7wtgmfyj206s051js2.jpg
https://wx3.sinaimg.cn/mw690/8ba84be1ly1g6u7wtjdrcj206y03yt9a.jpg
https://wx3.sinaimg.cn/mw690/8ba84be1ly1g6u7wtd9pzj207c0443zz.jpg
https://wx4.sinaimg.cn/mw690/8ba84be1ly1g6u7w8vha1j206m03jq3t.jpg
将图片 上传到微博 ,然后把链接 贴在 这个地方
page195
从书的源码中 的 templates 目录复制 网页
从书的源码中的static目录复制 图片
修改 mysite / views.py
from django.shortcuts import render
from django.template.loader import get_template
from django.http import HttpResponse
from mysite import models
# Create your views here.
def index(request):
products = models.Product.objects.all()
template = get_template('index.html')
html = template.render(locals())
return HttpResponse(html)
def detail(request, id):
try:
product = models.Product.objects.get(id=id)
images = models.PPhoto.objects.filter(product=product)
except:
pass
template = get_template('detail.html')
html = template.render(locals())
return HttpResponse(html)
修改 ch07www / urls.py
from django.conf.urls import include, url
from django.contrib import admin
from mysite import views
urlpatterns = [
url(r'^$', views.index),
url(r'^detail/(\d+)$', views.detail, name='detail-url'),
url(r'^admin/', include(admin.site.urls)),
]
http://192.168.99.218:8080/admin/mysite/product/
page207
mysite / admin.py
#_*_ encoding:utf-8 _*_
from django.contrib import admin
from mysite import models
class ProductAdmin(admin.ModelAdmin):
list_display = ('pmodel', 'nickname', 'price', 'year')
search_fields = ('nickname',)
ordering = ('-price', )
# admin.site.register(models.Product)
admin.site.register(models.Product, ProductAdmin)
admin.site.register(models.Maker)
admin.site.register(models.PModel)
admin.site.register(models.PPhoto)
base.html
<!-- base.html (ch07www project) -->
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>{% block title %}{% endblock %}</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<style>
h1, h2, h3, h4, h5, p, div {
font-family: 微软雅黑;
}
</style>
</head>
<body>
{% include "header.html" %}
{% block content %}{% endblock %}
{% include "footer.html" %}
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script>
</body>
</html>
detail.html
<!-- index.html (ch07www project) -->
{% extends "base.html" %}
{% block title %}{{product.nickname | default:"找不到指定的手机"}}{% endblock %}
{% block content %}
<div class='container' align=center>
{% if product %}
<table>
<tr><td align=center><h3>{{ product.nickname }}</h3></td></tr>
<tr><td align=center>{{ product.description }}</td></tr>
<tr><td align=center>公元{{ product.year }}年出厂</td></tr>
<tr><td align=center>售价:NT${{ product.price }}元</td></tr>
{% for image in images %}
{% if forloop.first %}
<tr><td align=center>
{% endif %}
<img src='{{ image.url }}' width=350><br>
{% if forloop.last %}
</td></tr>
{% endif %}
{% empty %}
<tr><td align=center>暂无图片</td></tr>
{% endfor %}
</table>
{% else %}
<h2>找不到指定的手机</h2>
{% endif %}
</div>
{% endblock %}
footer.html
<!-- footer.html (ch07www project) -->
<hr>
{% load staticfiles %}
<img src="{% static "images/logo.png" %}" width=100>
<em>Copyright 2016 <a href='http://hophd.com'>http://hophd.com</a>. All rights reserved.</em>
header.html
<!-- header.html (ch07www project) -->
<nav class='navbar navbar-default'>
<div class='container-fluid'>
<div class='navbar-header'>
<div class='navbar-brand' align=center>
DJ中古机卖场
</div>
</div>
<ul class='nav navbar-nav'>
<li class='active'><a href='/'>Home</a></li>
<li><a href='/admin'>后台管理</a></li>
</ul>
</div>
</nav>
index.html
<!-- index.html (ch07www project) -->
{% extends "base.html" %}
{% block title %}DJ中古机卖场{% endblock %}
{% block content %}
<div class='container' align=center>
{% for p in products %}
{% if forloop.first %}
<table>
<tr bgcolor='#cccccc'>
<td width=250>库存手机</td>
<td width=150>品牌/型号</td>
<td width=50>出厂年</td>
<td>价格</td></tr>
{% endif %}
<tr bgcolor='{% cycle "#ffccff" "ccffcc" %}'>
<td><a href='{% url "detail-url" p.id %}'>{{ p.nickname }}</a></td>
<td>{{ p.pmodel.maker.name }}/{{ p.pmodel }}</td>
<td>{{ p.year }}</td>
<td align=right>{{ p.price }}</td>
</tr>
{% if forloop.last %}
</table>
{% endif %}
{% empty %}
<h3>目前没有库存的中古机可以卖,真抱歉</h3>
{% endfor %}
</div>
{% endblock %}
总的源码为:
https://download.youkuaiyun.com/download/wowocpp/11728453
(稍后补充)