Python学习笔记6-MOSH-6小时-Django建立网站

创建一个新的项目PyShop

配置环境

pycharm里面输入

pip install django==2.1

接着创建一个new file,打开terminal输入

django-admin startproject pyshop .

这条命令是在 Django 中用于创建一个新的项目(Project)的命令,其中:

- `django-admin` 是一个命令行工具,用于管理 Django 项目的各种操作和功能。
- `startproject` 是一个子命令,用于创建一个新的 Django 项目。
- `pyshop` 是项目的名称,您可以根据自己的需求给项目取一个合适的名称。
- `.` 表示项目将被创建在当前目录中,这里的点号表示当前目录,新项目的文件和目录将会被创建在这个目录下。

当您运行这条命令时,Django 将在当前目录下创建一个新的项目,该项目将包含 Django 框架所需的文件和目录结构,以及默认的配置文件和设置。这是 Django 开始一个新项目的第一步。

在运行该命令后,您可以在当前目录下看到一个名为 `pyshop` 的文件夹,其中包含了 Django 项目的初始文件和目录。您可以在这个项目基础上开始开发您的 Django 应用。

然后输入这条命令:我按照mosh的python3 manage.py runserver不能运行,把3删了就好了

python manage.py runserver

`python3 manage.py runserver` 是用于在 Django 项目中启动开发服务器的命令。

具体来说:

- `python3` 是您的 Python 解释器的命令,用于运行 Python 脚本。
- `manage.py` 是 Django 项目根目录下的一个管理脚本,用于执行各种 Django 相关的管理命令。
- `runserver` 是一个 `manage.py` 支持的子命令,用于启动 Django 开发服务器。

当您运行 `python3 manage.py runserver` 命令时,Django 会启动一个本地开发服务器,该服务器会监听某个特定的端口(默认是 8000)并等待客户端请求。一旦服务器启动,您可以通过浏览器访问 `http://127.0.0.1:8000/` 或 `http://localhost:8000/` 来访问您的 Django 应用。

这个开发服务器会自动监视您的代码更改,并在代码发生变化时重新加载应用,以便您可以在开发过程中实时查看效果。

请注意,这个开发服务器主要用于开发和调试阶段,不适用于部署到生产环境。在部署到生产环境时,您应该使用适合的 Web 服务器,如 Apache、Nginx 等。

看起来您已经成功启动了 Django 的开发服务器,并且服务器正在监听 `http://127.0.0.1:8000/`。这是一个正常的输出,表明您的 Django 项目已经在运行中。

然而,还有一些未应用的数据库迁移(migrations),这可能会导致某些功能无法正常工作。在您的输出中,有一条提示:

```
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
```

这意味着有一些 Django 内置的应用(`admin`、`auth`、`contenttypes` 和 `sessions`)的数据库迁移还没有应用。为了让您的项目正常工作,您需要运行以下命令来应用这些迁移:

```bash
python manage.py migrate
```

在终端中执行此命令,然后重新启动开发服务器。这将确保所有数据库模式和表都已创建并更新,以便您的项目可以正常运行。

在 Windows 操作系统中,`CTRL-BREAK` 是一个组合键,通常用于停止正在运行的程序或进程。在上下文中,您可以使用 `CTRL-BREAK` 来停止运行 Django 开发服务器。

然而,许多键盘上并没有单独的 `CTRL-BREAK` 键。您可以考虑以下替代方法来停止 Django 开发服务器:

1. **CTRL-C**:在大多数情况下,您可以使用 `CTRL-C` 组合键来终止正在运行的命令。在终端中运行开发服务器时,按下 `CTRL-C` 将停止服务器的运行。

2. **关闭终端窗口**:关闭终端窗口也会终止正在运行的命令,包括开发服务器。

3. **使用任务管理器**:如果无法通过终端中的组合键停止服务器,您可以使用任务管理器来终止 Python 进程,从而停止服务器的运行。

综上所述,`CTRL-BREAK` 是一种常用的停止命令,但在某些键盘上可能不存在或不方便使用。您可以尝试其他替代方法来停止 Django 开发服务器。

MY FIRST APP

在terminal的新windows输入

python manage.py startapp product

 在 Django 项目中创建一个名为 "product" 的新应用程序。这个命令将在您的项目目录中创建一个新的文件夹,其中包含与 "product" 应用程序相关的文件和目录。

运行该命令后,您可以在项目目录中看到一个新的 "product" 文件夹,它的结构大致如下:

project_root/
    product/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py

创建完新的应用程序后,您可以在 settings.py 文件的 INSTALLED_APPS 配置中添加应用程序的名称,使得 Django 识别并使用这个新应用程序。

通过运行 python manage.py runserver,您可以启动开发服务器并访问创建的应用程序。从那里,您可以逐步构建和开发您的 "product" 应用程序,添加模型、视图和其他功能。

VIEW FUNCTION

from . import views,  .代表当前文件夹

在views.py定义了一个功能,简单的将一些纯文本返回给浏览器和客户端

from django.http import HttpResponse
from django.shortcuts import render

#/products -> index
# Uniform Resource Locator(Adderessurl)
def index(request):
    return HttpResponse('Hello World')

django不知道自己要调用这fuction,所以我们把urls.py模块嫁到我们的应用中

在urls的模块中,我们写了路径

urls.py如下:

from django.urls import path
from . import views

urlpattrens=[
    pathj('',views.index())
]

在一下file里继续写

 FINALLY,SUCCESSDE

 1.改的views

from django.http import HttpResponse
from django.shortcuts import render

#/products -> index
# Uniform Resource Locator(Adderessurl)
def index(request):
    return HttpResponse('Hello World')

 2.改的product的urls

from django.urls import path
from product import views  # 使用绝对导入

urlpatterns = [
    path('', views.index),
]A

3.改的pyshop的urls 

"""pyshop URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('product/',include('product.urls'))
]

 返回homepage开始报错也是情理之中

view练习题

加一个http://127.0.0.1:8000/product/newhttp://127.0.0.1:8000/product/new

 view.py

from django.http import HttpResponse
from django.shortcuts import render

#/products -> index
# Uniform Resource Locator(Adderessurl)
def index(request):
    return HttpResponse('Hello World')


def new(request):
    return HttpResponse('New Product')

from django.urls import path
from product import views  # 使用绝对导入

urlpatterns = [
    path('', views.index),
    path('new',views.new)
]

 MODEL

 在model.py里编写

from django.db import models


class Product(models.Model):
    name=models.CharField(max_length=255)
    price=models.FloatField()
    stock=models.IntegerField()
    image_url=models.CharField(max_length=2083)
    

Migration

  'product.apps.ProductConfig'

 在terminal里面输入

python manage.py makemigrations

 

 然后再terminal输入

python manage.py migrate

 打开 "DB Browser for SQLite"搜索名为 db.sqlite3 的文件导入

EXERCISE

1.在model.py里加上dictionary

class offer(models.Model):
    code=models.CharField(max_length=10)
    description=models.FloatField(max_length=255)
    discount=models.FloatField()

 2.在terminal里加上migration

python manage.py makemigrations

3.在terminal里run一遍

python manage.py migrate

4.导入sql lite里 

1.打开数据库 

 2.选择db.sqlite3

找不到路径就搜索db.sqlite3,在 Django 项目中,默认情况下,数据库文件通常位于项目根目录下的 db.sqlite3

3.找到刚刚创建的offer

 ADMIN

输入一下,之前记得runserver一下

http://127.0.0.1:8000/admin

 python manage.py createsuperuser

 回到web页面输入账号密码

 在admin.py里加了2行代码后实现了管理product的功能

from .models import Product
admin.site.register(Product)

 django自动生成如下界面,太神奇了

 把参数天下完成后save

 Customizing the Admin

from django.contrib import admin
from .models import Product
# Register your models here.

class ProductAdmin(admin.ModelAdmin)
    list_display = ('name','price','stock')
admin.site.register(Product,ProductAdmin)

EXERCISE

在主页加一个offer

from django.contrib import admin
from .models import Product,Offer

# Register your models here.


class OfferAdmin(admin.ModelAdmin):
    list_display = ('code','discount')
class ProductAdmin(admin.ModelAdmin):
    list_display = ('name','price','stock')
admin.site.register(Offer,OfferAdmin)
admin.site.register(Product,ProductAdmin)

admin编写的名称要和 models.py的class名称保持一致

 效果如图

 

 TEMPLATES

把product的界面改了

1.在view.py里加一个function


# /products -> index
# Uniform Resource Locator(Adderessurl)
def index(request):
    products = Product.objects.all()
    return render(request,'index.html',
                  {'products':products})



def new(request):
    return HttpResponse('New Product')

2.在product里创建一个templates的directory,在其下创建一个index.html的文件 

 

<h1>Products</h1>
<ul>
    {% for product in products %}
    <li>{{product.name}} (${{product.price}})</li>
    {% endfor %}

</ul>

  1. {%:template tag,动态执行逻辑
  2. {{:动态执行html标记中的值

ADDING BOOTSTRAP

BOOTSTRAP是一个非常流行的框架

创建一个base.html的文件从里面复制 Starter template 的模板Bootstrap · The most popular HTML, CSS, and JS library in the world.Powerful, extensible, and feature-packed frontend toolkit. Build and customize with Sass, utilize prebuilt grid system and components, and bring projects to life with powerful JavaScript plugins.https://getbootstrap.com/

 在index.html的加一个开头和结尾

{% extends 'base.html'%}
{% block content%}
<h1>Products</h1>
<ul>
    {% for product in products %}
    <li>{{product.name}} (${{product.price}})</li>
    {% endfor %}
</ul>
{% endblock%}

Rendering Cards

index改了改,从Cards · Bootstrap v5.3  

粘了段代码改了改

{% extends 'base.html'%}
{% block content%}
<h1>Products</h1>
<div class="row">
    {% for product in products %}
    <div class="col">
        <div class="card" style="width: 18rem;">
            <img src="{{product.image_url}}" class="card-img-top" alt="...">
            <div class="card-body">
                <h5 class="card-title">{{product.name}}</h5>
                <p class="card-text">{{product.price}}</p>
                <a href="#" class="btn btn-primary">Add to Cart</a>
            </div>
        </div>

    </div>
    {% endfor %}
</div>

{% endblock%}

 Final Touches

还有一些懒得写了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值