流程:
以用户注册为例
用户在页面网址栏中输入正确地址,进入urls路由到对应的视图函数中,视图函数返回到路由中对应的前端html文件,前端文件在用户输入models表中合法的内容后,通过
<input class="btn btn-primary btn-block" type="submit" value="注册">
input 控件,类型为submit(在点击注册按钮时提交页面中所有数据,可以在views文件中要什么获取什么),之后用户点击注册按钮,将form表单中的数据全部提交,在views视图文件中通过post(密文)或get(明文)方式获取前端数据,如果是post,要在form表单下添加 {% csrf_token %}
CSRF(跨域请求攻击)
html文件中:
action请求的地址,空为返回当前界面 method请求的方式
<form action="" method="post">
{% csrf_token %}
form表单中的文本输入框:
<input type="text" id="firstName" name="firstName" >
views文件中:
login_valid = request.POST.get("firstName") #前端界面中的name值
然后实例化表单中的内容
t=Student() #Student为models文件中的表
t.firstName=firstName #t.firstName中的firstName要与表单里出现的同名
t.save() #保存到数据库中
return render(request,"seller/login.html",locals()) #需要正确的html路径
通过return又返回到前端界面上
这样就完成了注册
应注意的点:
创建数据库:
create database 库名 charset=utf8;
一定要加charset=utf8,不然会在加载前端界面时出现1366的错误
创建APP及settings.py设置
Django鼓励多模块设计,快速开发
第一个static下的与app同名只不过首字母小写的seller是识别目录
Seller的app中含子urls,在Qshop父urls中用include包含
父urls
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('seller/',include("Seller.urls")),
]
子urls
from django.urls import path
from Seller.views import *
urlpatterns=[
path('index/',index),
path('login/',login),
path('gad/',goods_add),
path('glt/',goods_list),
]
底下的static在虚拟环境中Qshop目录下输入
python manage.py collectstatic
指令,收集所有APP中的static的静态文件到该static文件中
templates(检索目录)是app下的固定名字,不能少一个s,这个目录会自动检索里面的html文件,在settings里面不用设置
因为settings中已经自动设置好了
settings中还有以下设置,其中STATIC_URL与MEDIA_URL不能相同,media目录会自动创建
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,"static"),
)
MEDIA_URL='/media/'
MEDIA_ROOT=os.path.join(BASE_DIR,"static") #上传图片时的路径
model表单
直接对接数据库
models.ForeignKey(表名, on_delete=True) #一对多关系ForeignKey 外键,on_delete=True在删除的时候连带关系也删除
models.TextField() #文本框
models.ImageField(upload_to = "image") #注册时的图片上传到image文件夹中
models.EmailField() #邮箱格式
models.ManyToManyField(表名) #多对多关系
ajax:
基于js的一个局部提交,不影响用户体验的技术,不刷新界面