安装django,创建项目
pip install django
django-admin startproject Helloworld
创建app
python manage.py startapp app01
注册app,在settings.py中
INSTALLED_APPS = [
...
"app01.apps.App01Config",
# 新建app要注册
]
配置静态文件(js,css)
STATIC_URL = "static/"
配置模板(html)
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [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",
],
},
},
]
安装mysqlclient
pip install mysqlclient
去手动创建数据库(mysql)
mysql -h192.168.5.116 -P3306 -uroot -p123456
mysql> show databases;
mysql> create database test;
配置数据库连接,在settings.py中
# mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
# sqlite
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
在models.py中新建表
from django.db import models
# Create your models here.
import datetime
class Department(models.Model):
"""部门表"""
department_id = models.BigAutoField(primary_key=True)
title = models.CharField(verbose_name="部门名", max_length=100, null=True, blank=True, default="")
def __str__(self):
return self.title
class UserInfo(models.Model):
"""用户表"""
user_id = models.CharField(verbose_name="用户账号", primary_key=True, max_length=30)
name = models.CharField(verbose_name="姓名", max_length=30, null=True, blank=True, default="")
password = models.CharField(verbose_name="密码", max_length=64, null=True, blank=True, default="")
age = models.IntegerField(verbose_name="年龄", null=True, blank=True, default=18)
account = models.DecimalField(verbose_name="账户余额", decimal_places=2, max_digits=10, null=True, blank=True, default=0.0)
# obj.creat_time.strftime("%Y-%m-%d")
creat_time = models.DateTimeField(verbose_name="入职时间", null=True, blank=True, default=datetime.datetime.now())
# django约束
gender_choices = ((1, "男"), (2, "女"))
# obj.get_gender_display()获取男女
gender = models.SmallIntegerField(verbose_name="性别", choices=gender_choices, null=True, blank=True)
# 数据库外键约束
# Department.user_set()即可获取部门的所有员工
department = models.ForeignKey(to="Department", to_field="department_id", related_name="user_set",
verbose_name="所属部门", null=True, blank=True, on_delete=models.SET_NULL)
# on_delete=models.CASCADE 级联删除
用models.py更新数据库设计
python manage.py makemigrations
python manage.py migrate
- 在 urls.py 中,路由(URL 与 函数的对应关系)
- 在 views.py 中, 视图函数,编写业务逻辑
- templates目录,编写html(包括模板语法 {% static xxx %} )
- ModelForm 和 Form 组件,在增删改查功能中
- 生成 html 标签
- 请求数据校验。
- 保存到数据库 (ModelForm.save)
- 获取错误信息
- Cookie 和 Session 保存用户登录信息
- 重写中间件的process_request函数实现用户认证
- ORM数据库操作(filter,orderby等)
- 分页组件
用type用button,id标签绑定事件,而不是用type="submit"
<button id="btnAdd" type="button" class="btn btn-primary">提交</button>
<script type="text/javascript">
$(function () {
//页面框架加载后自动执行
bindBtnAddEvent();
})
function bindBtnAddEvent(){
$("#btnAdd").click(function (){
$(".error-msg").empty();
//先把错误信息置空
$.ajax({
url:"/task/add",
type:"post",
data:$("#formAdd").serialize(),
dataType:"JSON", //把json字符串转为前端js对象
success: function (res){
console.log(res);
if(res.status){
alert("添加成功");
}
else {
// alert("添加失败");
// 循环每一个错误
$.each(res.error,function (name,data){
$("#id_" + name).next().text(data[0]);
// modelform自动生成的input框id属性,就是id_+字段名
// .next()表示下一个标签,.text()设置内容
})
}
}
})
})
}
</script>
view函数中需要免除csrf_token
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 免除csrf_token认证,就可发post