pythonweb开发Django入门
另附:
- 官方教程: https://docs.djangoproject.com/en/3.0/intro/tutorial02/
- 菜鸟教程: https://www.runoob.com/django/django-tutorial.html
正文
本人开发环境
- 操作系统: MacOS
- IDE: vscode
- 数据库: mysql
- python 版本 3.x
准备工作
安装 django (非 maOS 操作系统 请参考开篇的教程选择安装方式,以及验证是否安装成功)
python3 -m pip install django==1.11.6
创建项目
django-admin startproject helloworld(这个是项目名)
图中标记了 4 个地方1. 创建完 helloworld 项目后,会发现helloworld 下面还有一个 helloworld, 后面说到的 helloworld 一般都是第一层级,简称项目根目录
2. settings.py 主要是一些配置,比如数据库,静态文件存放位置等
3. urls.py 主要配置 url 和 函数的映射关系
4. manage.py 提供用来管理项目的命令,比如启动项目,后面请多留意
进入项目根目录
cd helloworld
启动项目,并访问
(这里会启动失败,原因是 python3 和 django 的兼容问题,反正我用的 django 版本存在这个问题,解决方式就是删除某个文件的一个 逗号,如果遇见了,百度一搜就明白了,具体内容当初忘记保存了)
python3 manage.py runserver // 当然也可以指定ip:host
python3 manage.py runserver localhost:8080
- 至此一个 web 项目雏形已经有了
继续完善
至此我们就可以自行开发 web 应用了,但是你也许还会问
- http 请求调用的函数写在哪里,以及函数 和 页面的映射关系如何体现
- 静态文件的存放位置
下面就新建的 helloword 项目进行讲解
问题 1. 函数及其映射关系
找到 helloworld/helloworld/ 下面有个 urls.py 文件
默认配置:
from django.conf.urls import url from django.contrib import admin
urlpatterns = [
url(r"^admin/", admin.site.urls),
]
修改后:
from django.conf.urls import url from django.contrib import admin
# 下面是新增的
from django.shortcuts import HttpResponse, render, redirect
# 1. 跳转页面
# render 表示 访问 http://localhost:8000/index 会跳转到 index.html 页面
def index(request):
return render(request, "index.html")
# 2. 跳转页面,并携带参数
def index02(request):
return render(request, "index.html", {"参数名", 值})
# 3. 重定向
def index03(request):
return redirect("/index/")
# 4. 接收参数
def index04(request):
# 接收 post 请求参数
request.POST.get("参数名")
# 接收 get 请求参数
request.GET.get("参数名")
return render(request, "index.html")
# 配置 url 映射
urlpatterns = [
url(r"^admin/", admin.site.urls),
# 配置 url 映射
# 访问 http://localhost:8000/index/ 就会调用上面的 index 函数
url(r"^index/", index),
# TODO 省略 index02, index03, index 04 映射配置
]
- 静态文件存放位置
找到 helloworld/helloworld/ 下面有个 settings.py 文件
html 文件配置: 大概 50 多行的位置
TEMPLATES = [{
"BACKEND": "django.template.backends.django.DjangoTemplates",
# 修改这个配置项如下
# 然后在项目根目录下,新建 templates 目录,用于存放 html 文件
"DIRS": [
os.path.join(BASE_DIR, "templates")
],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
css,js ,image 文件配置: 在 settings.py 文件末尾
STATIC_URL = "/static/" # 在 项目根目录 helloworld 下面# 当然还有别名的用法,刚开始学,多说无益
如何在 html 中引用 css,js
<!DOCTYPE html><html lang="en">
<head>
<script src="/static/test.js"></script>
<title>Document</title>
</head>
<body>
</body>
</html>
规范项目
上面有些写法多为练习使用,因此不太规范。比如我们在 helloword/helloword/urls.py 写了一大堆函数,非常不雅观。所以现在引入一个新的东西。
在项目根目录下,执行
python3 manage.py startapp app(模块名)
# 这是我们第二次使用 manage.py 这个文件,
# 第一次是启动项目,现在应该可以理解 这个文件是干嘛用的
# 执行结束,我们会发现项目根目录下多了一个 app 目录
让 django 知道你新增的 app 模块
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
# 新增
"app.apps.AppConfig" # 也可以直接写 "app"
# app 就是新增的目录名 后面的 固定,
# 你也可以打开 app/apps.py 文件,看看
]
app 目录下 有个 views.py 文件,我们可以把函数定义在这里。
from django.shortcuts import HttpResponse, render, redirect
def index(request):
return render(request, "index.html")
然后回到 helloword/helloword/urls.py 文件中,修改后如下:
# 1. 导入函数
from app.views import index
# 2. 配置
urlpatterns = [
url(r"^admin/", admin.site.urls),
url(r"^index/", index),
]
附加
如何配置 mysql 数据库
同样找到 helloworld/helloworld/ 下面有个 settings.py 文件,大概 70-80行左右
修改后如下:
DATABASES = { "default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "student_sys", # 库
"USER": "root",
"PASSWORD": "123456",
"HOST": "localhost",
"PORT": 3306
}
}
然后找到 helloworld/app/init.py 文件
文件默认是空的, 添加如下配置
import pymysql# 告诉 django 用 pymysql 代替 mysqldb
pymysql.install_as_MySQLdb()
引入 orm
进入 helloworld/app/ 目录找到 models.py 文件,修改如下:
from django.db import models# 定义一个 Student 类
class Student(models.Model):
id = models.AutoField(primary_key=True) # 主键
name = models.CharField(max_length=20) # 字符类型
sex = models.CharField(max_length=2)
birthday = models.CharField(max_length=10)
def __str__(self):
return self.name + " " + self.sex + " " + self.birthday
在项目根目录 helloworld 下依次执行
python3 manage.py makemigrationspython3 manage.py migrate
会自动帮我们生成表
也许你还会困惑:
- 为什么就定义了一个 model,生成了那么多表
- 修改 model 后,怎么自动更新表结构
- 如何 crud 等等
~~~~~ 请自行探索
总结
自我吐槽: 其实这样的教程很鸡肋,担心篇幅过长看的人眼花缭乱。
- 很多地方没有给出解释,比如 settings.py 的一些配置,自动生成表等
- 遗留了很多问题没有给出答案,甚至有些问题都没在文中提到,比如,访问页面会出现 403,该如何解决
- 之所以没讲那么多,是觉得那些问题很容解决
写完之后,感觉本文的定位更多的是自我总结,可能你们看到这文章会吐槽,喷我~~~
以上是 pythonweb开发Django入门 的全部内容, 来源链接: utcz.com/z/513107.html