目录css
利用Django 框架搭建一个简易版本的登陆注册,修改用户信息的项目html
在此以前,须要了解如下知识点:前端
默认状况下全部的 html 文件都是放在 templates 文件夹内的。python
静态文件就是 网站所使用到的全部提早写好的css、js、第三方的前端模块、图片文件、都叫作静态文件资源。mysql
默认状况下网站所用到的静态文件资源所有都会放到static文件夹下,jquery
Django中须要手动建立这个文件夹,static 文件夹下面还能够建立其余的文件夹,将css、js文件区分开来。sql
css 文件夹 js 文件夹 font 文件夹 img 文件夹 Bootstrap
在 mysite settings.py配置文件中添加如下信息:shell
# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' # 访问静态文件的接口url路径后缀, STATICFILES_DIRS = [ # 静态文件资源存在的具体文件夹目录 os.path.join(BASE_DIR,"static"), # 将static文件里的内容暴露给用户看 os.path.join(BASE_DIR,"static1"), # 能够写多个 ] # 这样客户端经过url方式能够访问你配置的静态文件资源。
咱们在配置好这个静态文件配置后,须要在html文件中动态使用静态文件的url路径,能够在html中动态绑定,以避免后续静态文件路径变更很差扩展。数据库
咱们以前学过了Bootstrap框架,能够直接引用过来。django
将bootstrap文件夹放入static文件夹中,html head标签内引用如下内容。
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> {% load static %} <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
如今咱们在访问咱们的html页面,会看到请求静态文件的url路径会变成咱们想要的:,此时咱们看到这个请求后缀是static,若是咱们没有再urls.py中配置这个对应关系,咱们是没办法访问到的,这个为何访问的到呢?这是由于让django帮咱们作了这个操做,你就不用操心了哈~。
Request URL: http://127.0.0.1:8000/static/bootstrap/css/bootstrap.min.css
注意:
若是你的Django项目中 DEBUG
模式设置为False,那么静态文件会报404,修改成True便可正常访问(200)
form表单默认是get请求。
那么咱们也能够指定他的请求方式是post
或者get请求也能够携带一些参数一块儿发送到后端:
格式:路径后缀/?xxx=xxx&yyy=xxx
http://127.0.0.1:8000/login/?user=qinyj&pwd=123
那么问题就来了,get请求携带参数咱们均可以看到,它的参数都是在浏览器url上直接看获得的,那么咱们总结如下:
不写,默认朝当前地址提交
只写后缀的形式:index/
写全路径的形式:https://www.baidu.com
前期若是咱们在朝后端提交post请求的时候,会出现403的状况,须要注释掉配置文件中一行内容。
'django.middleware.csrf.CsrfViewMiddleware'
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
在django中后端的视图函数,不管是发的get请求仍是post请求,都会执行视图函数,默认处理的是get请求。
咱们在视图函数中定义的全部函数都必须有返回值,而且返回值都是HTTPResponse对象
如何在python后端判断当前的请求方式是什么?
这里须要了解request 的一些方法
request.method:获取请求方式,返回的是纯大写的字符串。
request.GET:获取用户提交的get请求数据,返回的是列表套对象。
request.GET.get():获取列表中的最后一个
request.GET.getlist():获取列表类型的数据
request.POST:获取用户提交的post请求数据
request.POST.get():获取列表中的最后一个
request.POST.getlist():获取列表类型的数据
须要在settings.py配置文件中配置
DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME':'day50', 'USER':'root', 'PASSWORD':'123', 'HOST':'192.168.32.130', 'PORT':3306, } }
在项目名/应用名下的一个__init__.py
中写
import pymysql pymysql.install_as_MySQLdb()
ORM 对象关系映射
python中 数据库 类名 --> 表名 对象 --> 数据 对象.属性 --> 字段对应的值
为何使用ORM
可以让不会数据库操做的人也可以简单方便的去操做数据库
ORM的缺点
封装程度过高,有时候会出现查询效率偏低的问题。
咱们在写django项目的时候,最好一个django项目就对应一个数据库。
from django.db import models # Create your models here. # 必须是models.Model的子类 class User(models.Model): # 若是不写主键,默认会添加一个名为id的主键,而且这个主键是自增id name = models.CharField(max_length=32) pwd = models.IntegerField()
编写完models.py以后,咱们要把表建立在MySQL数据库中,须要用到两条命令
python3 manage.py makemigrations
记录将数据的修改
python3 manage.py migrate
真正同步到数据库中
只要修改了models.py中与数据库相关的代码,就必须从新执行上面两条命令。
对数据库中字段的修改,直接修改字段便可
若是是新增数据库字段,要注意两点:
要给新的字段设置一个默认值
email = models.EmailField(default="qinyj@qq.com")
或者设置新的字段为空
phone = models.BigIntergerField(null=True)
若是要删除数据字段,直接注释对应的字段便可,注意删除字段也会把数据删除
最后的最后,记得要执行数据库的两条迁移命令
1.python3 manage.py makemigrations # 将数据库的修改 记录到小本本上(migrations文件内) 2.python3 manage.py migrate # 将修改操做真正的同步到数据库中
增: models.User.objects.create user_obj = models.User.objects.create(username=username,password=password) print(user_obj,user_obj.username,user_obj.password) # create方法会有一个返回值 返回值就是当前被建立的对象自己 删: models.User.objects.filter(id=delete_id).delete() """ 批量操做 会将filter查询出来的列表中全部的对象所有删除 """ 改: models.User.objects.filter(id=edit_id).update(username=username,password=password) """ 批量操做 会将filter查询出来的列表中全部的对象所有更新 """ 查: data = models.User.objects.filter(username=username) # <QuerySet [<User: User object>]> """ filter返回的结果是一个"列表",里面才是真正数据对象 filer括号内能够放多个关键字参数 这多个关键字参数在查询的时候 是and关系 """ user_list = models.User.objects.all() # models.User.objects.filter() """ 结果是一个"列表" 里面是一个个的数据对象 """