以下项目实现基于一个投票系统
pip install django
pycharm的setting里找到这个,点击+号,搜索django
点击Install Package
在pip安装完之后,在python的Scripts目录里有 django-admin.exe
:::tips
django-admin.exe startproject [项目名称]
:::
目录结构是这样
python3 -m django startproject my_django[项目名称] 或者 django-admin startproject my_django[项目名称]
目录结构是这样
安装完django后,new project可以看到django
建好之后的django是这样的目录结构
pycharm创建的django项目多了一个templates目录
一个类似于django-admin.exe的管理脚本,可以对你建立的django项目进行管理,每次新建一个django项目都会生成这个文件
一个空文件,标识这个文件夹是一个包
作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口,处理网络请求的文件
作为你的项目的运行在 WSGI 兼容的Web服务器上的入口,也是处理网络请求的文件
django项目的配置文件
Django 项目的 URL 声明,就像你网站的“目录”,其实就是常说的路由配置
模板文件放置的文件夹,html等等文件
python3 manage.py runserver
一个项目可以有很多应用,一个应用也可以被很多项目使用,应用app相当于一个功能模块python3 manage.py startapp app1
目录结构如下
django默认提供的后台管理,不需要修改
一些关于创建的app的信息,不需要修改
数据库模型文件
视图文件,对web页面进行设计
数据库迁移文件,数据的每一次变更,这里就会记录
测试文件
创建app后,要使用得先注册,找到settings.py,写入最后一行
这样就成功注册了app1这个应用,开始对app1进行开发
先编写视图文件views.py
from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): return HttpResponse("Hello World!")
一个经典的Hello world,这里是对http请求进行了处理,response返回一个Hello World!
在app1/ ,创建一个urls.py,默认是没有这个文件的,编写代码,把之前views编写的index函数给包含进去
from django.urls import path from . import views urlpatterns = [ path('', views.index, name="index") ]
在my_django/urls.py继续编写,包含app1.urls
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('app1/', include('app1.urls')) ]
启动web服务python3 manage.py runserver
,访问app1
django默认使用的是sqlite数据库,还是settings.py文件里看
如果想使用其它数据库,可以在这里进行修改
python3 manage.py migrate
对INSTALLED_APPS里注册的app进行一个迁移应用,每当注册了的app的数据发生迁移,都会进行一个记录
在这个投票应用中,需要创建两个模型:问题 Question 和选项 Choice。Question 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题
编写app1/models.py
from django.db import models # Create your models here. class Question(models.Model): question_text = models.CharField(max_length=200) # 创建一个字符串字段 pub_date = models.DateTimeField("date published") # 创建一个date字段 class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) # 标识为外键 choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) # 创建一个数字型字段,默认值设为0
python3 manage.py makemigrations app1
,生成一个迁移
查看一下迁移所做的sql操作,python3 manage.py sqlmigrate app1 0001
,可以看到已经帮我们创建了表
最后执行python3 manage.py migrate
,应用一下所做的修改
这个 migrate 命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations 来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。
python3 manage.py shell
,对刚才创建的模型进行一个使用
对模型文件进行一下修改,让Question.objects.all()
所展示的信息更为直观
from django.db import models # Create your models here. class Question(models.Model): def __str__(self): return self.question_text question_text = models.CharField(max_length=200) # 创建一个字符串字段 pub_date = models.DateTimeField("date published") # 创建一个date字段 class Choice(models.Model): def __str__(self): return self.choice_text question = models.ForeignKey(Question, on_delete=models.CASCADE) # 标识为外键 choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) # 创建一个数字型字段,默认值设为0
账号 admin:admin123
创建之后访问/admin,登录进入后台
编写app1/admin.py
from django.contrib import admin from .models import Question # Register your models here. admin.site.register(Question)
在app1下创建一个templates文件夹,在该文件夹下继续创建一个index.html文件
{{question_text}}
编写views.py
from django.shortcuts import render from django.http import HttpResponse from django.template import loader # Create your views here. def index(request): template = loader.get_template("index.html") context = { "question_text": "123456" } return HttpResponse(template.render(context, request))
上面是一种最简单的变量引用方法
<h1> {% for i in n %} <h2>{{i}}</h2> {% endfor %} </h1>
from django.shortcuts import render from django.http import HttpResponse from django.template import loader # Create your views here. def index(request): n = ['f12', 'f13', 'f14'] return render(request, 'index.html', {'n': n})
<h1> {% if i == "f12" %} <h2>f12 is handsome</h2> {% else %} <h2>f12 is very handsome</h2> {% endif %} </h1>
from django.shortcuts import render from django.http import HttpResponse from django.template import loader # Create your views here. def index(request): i = 'f12' return render(request, 'index.html', {'i': i})