创建一个新的项目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![](https://img-blog.csdnimg.cn/63f08805c0bb42069acbf19cd013c10f.png)
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![](https://img-blog.csdnimg.cn/4768e0f0dbd04b88bb37afdd58487ffe.png)
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![](https://img-blog.csdnimg.cn/8b25936666ce43e4b67a9a6bcd7401ab.png)
ADMIN
输入一下,之前记得runserver一下
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>
- {%:template tag,动态执行逻辑
- {{:动态执行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
还有一些懒得写了