Python新手使用的Django架站的16堂课 --- 第七章 ----练习

本教程详细介绍了如何使用Django框架构建一个二手手机销售网站,涵盖了虚拟环境搭建、项目创建、数据模型设计、视图和模板实现、静态文件管理及网站部署等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
  1. 添加 ‘mysite’,
    在这里插入图片描述

  2. 修改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

(稍后补充)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值