目录
1.实现网页开启
打开Anaconda Prompt
- 输入:conda env list——查看Anaconda当前已经配置的环境
- 输入:activate+环境名——切换环境
- 输入:conda list ——查看当前环境下已安装模块
- 输入:django-admin startproject test1——创建test1项目(执行成功后会产生一个test1文件夹,里面的内容有manage.py,管理文件,init.py,表示当前文件夹是python的一个模块,settings.py,保存设置信息,urls.py,储存url地址文件,wsgi.py,WSGI协议文件)
- 输入:python manage.py startapp app名称——创建应用,会自动创建目录(找到settings.py中的INSTALLED_APPS设置项,将应用添加进去'app名称')
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app', ]
- 输入:python manage.py runserver——启动开发web服务器
退出方法:Quit the server with CTRL-BREAK.
在浏览器中访问127.0.0.1:8000/可以得到启动成功的页面
2.创建网页数据库模型
在创建的app文件夹中包含models.py文件,数据库的模型代码就写在这里面
文件中创建了博客所需的三个数据库表(Class):分类,标签,文章
在文章中包含了标题、正文、发表/修改时间、摘要、作者等数据,同时还包含了与分类、标签的对应关系
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=100)
class Tag(models.Model):
name = models.CharField(max_length=100)
class Post(models.Model):
title = models.CharField(max_length=70)
body = models.TextField()
created_time = models.DateTimeField()
modified_time = models.DateTimeField()
excerpt = models.CharField(max_length=200, blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag, blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
下面是对代码的注解:
CharField 用于指定分类名 name 的数据类型(字符型 CharField 、日期时间类型 DateTimeField、整数类型 IntegerField 等等)
django 内置的全部类型可查看文档
https://docs.djangoproject.com/en/2.2/ref/models/fields/#field-types较短的字符使用CharField,大段文本使用 TextField
文章摘要,可以没有文章摘要,但默认情况下 CharField 要求我们必须存入数据,否则就会报错,指定 CharField 的 blank=True 参数值后就可以允许空值了。
文章与分类使用 ForeignKey,一对多的关联关系, django 2.0 以后,ForeignKey 必须传入一个 on_delete 参数用来指定当关联的数据被删除时,被关联的数据的行为,我们这里假定当某个分类被删除时,该分类下全部文章也同时被删除,因此使用 models.CASCADE 参数,意为级联删除文章与标签使用 ManyToManyField ,多对多的关联关系,同时我们规定文章可以没有标签,因此为标签 tags 指定了 blank=True
https://docs.djangoproject.com/en/2.2/topics/db/models/#relationships文章作者,这里 User 是从 django.contrib.auth.models 导入的
django.contrib.auth 是 django 内置的应用,专门用于处理网站用户的注册、登录等流程
数据库模型的代码还需要django 翻译成数据库语言,因此实际上这些数据库表还没有真正的在数据库中创建
- 输入:python manage.py makemigrations
- 输入:python manage.py migrate
django 使用了 Python 内置的 SQLite3 数据库,SQLite3 是一个十分轻巧的数据库,项目根目录下多出了一个 db.sqlite3 的文件,这就是 SQLite3 数据库文件
3.数据库数据操作
输入:python manage.py shell——开启交互式命令行
Ctrl + break 退出交互式命令行
4.处理HTTP请求
Web 应用的交互过程其实就是 HTTP 请求与响应的过程
使用浏览器来上网,上网流程大致是这样的:
- 打开浏览器,在地址栏输入想访问的网址
- 浏览器知道我们想要访问哪个网址后,把我们的访问意图包装成一个 HTTP 请求,发给我们想要访问的网址所对应的服务器
- 服务器处理HTTP请求后生成HTTP 响应给浏览器,浏览器解读这个响应,并显示相关内容
django 作为一个 Web 框架,它的使命就是处理流程中的第二步,即接收浏览器发来的 HTTP 请求,返回相应的 HTTP 响应
- 在 blog 应用的目录下创建一个 urls.py 文件
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
-
实际编写定义在 views.py 文件中的view.index函数
from django.http import HttpResponse def index(request): return HttpResponse("欢迎访问我的博客首页!"