一、Django项目流程
1.创建django项目
打开指定文件夹,在路径位置输入cmd打开命令行
创建django项目: django-admin startproject 项目名
创建子应用: python .\manage.py startapp 子应用名
启动项目 python manage.py runserver
2.修改配置信息
# 注册子应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # 注册子应用
]
# 修改模板相关配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'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',
],
},
},
]
# 配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 使用mysql数据库
'HOST': 'localhost', # 主机
'PORT': 3306, # 端口
'USER': 'root', # 数据库的用户名
'PASSWORD': 'root', # 数据库的密码
'NAME': 'test', # 数据库的名字
}
}
# 语言和时区
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
# 配置静态资源(没用到)
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')] # 配置路径,需要自己创建文件夹
常用sql代码回顾:
查看所有数据库: show databases;
创建数据库: create database 数据名 charset=utf8;
删除数据库: drop database 数据库名;
调用数据库: use 数据库名;
查看数据库下的所有表: show tables;
查看表结构: desc 表名;
查看表中的所有数据: select * from 表名;
3.安装数据库
在与项目同名的文件夹下有一个init.py文件,添加代码:
import pymysql
pymysql.install_as_MySQLdb()
4.编写模型类
from django.db import models
# Create your models here.
# 模型类 会自动生成 id字段
class Game(models.Model):
# CharField 字符串 max_length 最大长度 verbose_name 后台管理的字段名
name = models.CharField(max_length=20, verbose_name='角色名')
# IntegerField 整型
atk = models.IntegerField(verbose_name='攻击力')
level = models.IntegerField(verbose_name='等级')
5.迁移
1.生成迁移文件:python manage.py makemigrations
2.执行前移:python manage.py migrate
注意: 迁移出错,需要把数据库删了创建干净的数据库,迁移文件删了,重新执行上面2个步骤
6.创建超级用户并添加数据
1.创建超级用户:python manage.py createsuperuser
2.在子应用的admin.py文件中添加代码,注册表,不然admin控制台没办法管理这个表
from django.contrib import admin
from myapp.models import Game
# Register your models here.
admin.site.register(Game)
3.运行项目,在admin页面添加数据
7.视图代码编写
from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import Game
# Create your views here.
# 视图函数
def MyView(request):
# 3.MVT三层联动
# 通过Game模型类,取出数据块中的数据(ORM操作),取出所有角色信息
game_data = Game.objects.all()
content = { # 传递给页面的数据,字典
'games': game_data,
}
# render返回一个模板页面
return render(request, 'index2.html', content)
# def MyView(request):
# # 1.返回一个相应
# return HttpResponse('<h1>这是我的第一个视图</h1>')
#
# # 2.返回一个模板页面,并传递了一些数据
# content = { # 传递给页面的数据,格式是字典
# 'money': 100,
# 'scores': [100, 99, 95, 80, 85],
# 'game': {
# 'name': '龙傲天',
# 'atk': '999',
# 'def': '10',
# 'level': '18',
# }
# }
# return render(request, 'index.html', content)
8.配置路由
from django.contrib import admin
from django.urls import path
from myapp import views
# 主路由
urlpatterns = [
path('admin/', admin.site.urls),
path('myview/', views.MyView),
]
二、视图层
1.GET请求处理
解析get请求中的query参数127.0.0.1:8000/myview/?page=10&id=1001
# 解析GET请求
def MyView(request):
page = request.GET.get('page')
id = request.GET.get('id')
return HttpResponse(f"这是第一个视图,当前页数为{page},当前id为{id}")
2.POST请求处理
编写表单页面,在表单中发送post请求提交数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>表单页面</h3>
<form method="post" action="/myview2/">
{% csrf_token %}
账号: <input type="text" name="user">
密码: <input type="password" name="pwd">
<input type="submit" value="提交">
</form>
</body>
</html>
# 解析POST请求
def MyView2(request):
user = request.POST.get('user')
pwd = request.POST.get('pwd')
return HttpResponse(f"这是第二个视图,账号:{user},密码:{pwd}")
解决CSRF问题的2种方法:
1.注释中间件中与CSRF相关的中间件
2.在表单中加上{% csrf_token %}