Django——(1)入门

it2026-02-07  0

Django入门

建立项目创建应用程序创建网页:主页创建其他网页

建立项目

指定规范 建立虚拟环境

D:\Python\meal_planner>python -m venv ll_env

激活虚拟环境

D:\Python\meal_planner>ll_env\Scripts\activate

停止使用虚拟环境

D:\Python\meal_planner>deactivate

安装Django

(ll_env) D:\Python\meal_planner>pip install Django

在Django 中创建一个项目:meal_planner

(ll_env) D:\Python\meal_planner>django-admin startproject meal_planner .

注意末尾句点 创建数据库

(ll_env) D:\Python\meal_planner>python manage.py migrate

查看项目是否正确创立

(ll_env) D:\Python\meal_planner>python manage.py runserver

默认端口8000

创建应用程序

在manage.py 所在位置打开终端,进入虚拟环境,创建应用程序

(ll_env) D:\Python\meal_planner>python manage.py startapp meal_plans

定义模型 修改models.py

from django.db import models # Create your models here. class Meals(models.Model): #用户的每日三餐 主题 kinds = models.CharField(max_length=200) #三餐的名字 标题 主题内容 date_added = models.DateTimeField(auto_now_add = True) #自动添加时间 def __str__(self): #返回模型的字符串表示 return self.kinds class Food(models.Model): #三餐的食物分配 meals = models.ForeignKey(Meals,on_delete=models.CASCADE) #将三餐与食物匹配 主题与条目匹配 text = models.TextField() #食物 条目内容 date_added = models.DateTimeField(auto_now_add=True) #添加日期 class Meta: verbose_name_plural = 'foods' #不懂? def __str__(self): return self.text[:50] + "..." #返回条目信息

激活模型 1.修改项目里的settings.py文件

--snip-- INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'meal_plans', #添加自己创建的应用程序 ] --snip--

2.使数据库能够存储模型与条目相关联的数据 确定如何修改

(ll_env) D:\Python\meal_planner>python manage.py makemigrations meal_plans

3.应用上一步产生的迁移文件修改数据库

(ll_env) D:\Python\meal_planner>python manage.py migrate

4.向管理网站注册模型 修改应用程序admin.py文件

from django.contrib import admin # Register your models here. from meal_plans.models import Meals,Food #导入要注册的模型 admin.site.register(Meals) admin.site.register(Food) #通过管理网站管理模型 注册模型

创建超级用户

(ll_env) D:\Python\meal_planner>python manage.py createsuperuser Username (leave blank to use 'tiankong'): ll_admin Email address: Password: Password (again):

Django shell

(ll_env) D:\Python\meal_planner>python manage.py shell >>> from meal_plans.models import Meals >>> Meals.objects.all() #获取主题的所有实例 <QuerySet [<Meals: breakfast>, <Meals: lunch>, <Meals: dinner>]> #遍历查询集 >>> meals = Meals.objects.all() >>> for meal in meals: ... print(meal.id,meal) #打印实例id ... 1 breakfast 2 lunch 3 dinner >>> m = Meals.objects.get(id=1) #根据ID获取实例,查看其属性 >>> m.kinds 'breakfast' >>> m.date_added datetime.datetime(2020, 10, 22, 11, 33, 49, 312000, tzinfo=<UTC>) >>> m.food_set.all() #查看该主题的条目 <QuerySet [<Food: eggs, milk, bread...>]>

创建网页:主页

1.映射URL 修改项目主文件夹meal_planner 的 urls.py文件

from django.contrib import admin from django.urls import path from django.conf.urls import include,url urlpatterns = [ path('admin/', admin.site.urls), # ? url(r'',include(('meal_plans.urls','meal_plans'),namespace='meal_plans')), #模块 应用名字 实参namespace ]

创建应用meal_plans的urls.py 文件

#定义meal_plans的URL模式 from django.conf.urls import url from . import views #from django.urls import path #app_name = '[meal_plans]' urlpatterns = [ #主页 url(r'^$',views.index,name='index'), #path('',views.index,name='index'), #正则表达式 调用的视图函数 将这个URL模式的名称命名为index ]

2.编写视图 修改应用meal_plans文件夹中views.py文件

from django.shortcuts import render # Create your views here. def index(request): #学习笔记的主页 return render(request,'meal_plans/index.html') #原始请求对象,创建网页模板

3.编写模板 在应用meal_plans文件夹中创建新的文件夹templates,在其中创建一个新的文件夹meal_plans,在其中新建文件index.html

<p>Meal Plans</p> <p>The goal of the diet plan is to eat healthy.</p>

创建其他网页

1.模板继承 父模板 在存储index.html的目录中,创建base.html

<p> <a href="{% url 'pizzas:index' %}">Pizzera</a> #模板标签,锚标签 </p> {% block content %}{% endblock content %}

子模板 重新编写index.html

{% extends "pizzas/base.html" %} #继承父模块 {% block content %} <p>We have different favour delicious pizzas.</p> {% endblock content %}

2.显示所有主题的页面 URL模式 修改应用的urls.py

from . import views from django.urls import path urlpatterns = [ #主页 path('',views.index,name='index'), #显示所有的pizza 主题 path('pizzas/',views.pizzas,name='pizzas'), ]

视图 修改views.py文件

from django.shortcuts import render from .models import Pizza # Create your views here. def index(request): return render(request,'pizzas/index.html') def pizzas(request): #显示所有的pizza pizzas = Pizza.objects.order_by('date_added') context = {'pizzas':pizzas} #字典 return render(request,'pizzas/pizzas.html',context)

模板 在index.html所在目录中创建pizzas.html

{% extends "pizzas/base.html" %} {% block content %} <p>Pizzas</p> <ul> {% for pizza in pizzas %} <li>{{ pizza }}</li> {% empty %} <li>No pizzas have been added yet.</li> {% endfor %} </ul> {% endblock content %}

修改父模板,使其包含所有主题的页面的链接

<p> <a href="{% url 'pizzas:index' %}">Pizzera</a> - <a href="{% url 'pizzas:pizzas' %}">Pizzas</a> </p> {% block content %}{% endblock content %}

3.显示特定主题的页面 修改应用的urls.py文件

from . import views from django.urls import path urlpatterns = [ #主页 path('',views.index,name='index'), #显示所有的pizza 主题 path('pizzas',views.pizzas,name='pizzas'), #显示特定主题的详细页面 path('pizzas/(?P<pizza_id>\d+)/',views.pizza,name='pizza'), ]

修改viems.py文件

from django.shortcuts import render from .models import Pizza # Create your views here. def index(request): return render(request,'pizzas/index.html') def pizzas(request): #显示所有的pizza pizzas = Pizza.objects.order_by('date_added') context = {'pizzas':pizzas} return render(request,'pizzas/pizzas.html',context) def pizza(request,pizza_id): #显示单个Pizza及其加料 pizza = Pizza.objects.get(id=pizza_id) #主题 toppings = pizza.topping_set.order_by('-date_added')#条目 context = {'pizza':pizza,'toppings':toppings} return render(request,'pizzas/pizza.html',context)

创建模板 pizza.html

{% extends 'pizzas/base.html' %} {% block content %} <p>Pizza:{{ pizza }}</p> <p>Toppings:</p> <ul> {% for topping in toppings %} <li> <p>{{ topping.date_added|date:'M d, Y H:i' }}</p> <p>{{ topping.name|linebreaks }}</p> <!--类的属性--> </li> {% empty %} <li> There are no toppings for this pizza yet. </li> {% endfor %} </ul> {% endblock content %}

每个pizza链接到相应的网页,修改pizzas.html

{% extends "pizzas/base.html" %} {% block content %} <p>Pizzas</p> <ul> {% for pizza in pizzas %} <li> <a href="{% url 'pizzas:pizza' pizza.id %}">{{ pizza }}</a> </li> {% empty %} <li>No pizzas have been added yet.</li> {% endfor %} </ul> {% endblock content %}
最新回复(0)