静态文件配置
1.编写一个登录功能
1.1创建django项目并创建一个app
1.2在urls.py添加一组对应关系
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', views.login),
]
1.3在app的views.py中编写登录核心逻辑
def login(request):
return render(request, 'login.html')
1.4利用三板斧与前端做交互
'提前在urls.py中开设了相应的资源连接,才可以在访问django框架资源的时候拿到数据,如果访问不到资源,那就是没有开设相应的接口'
2.静态文件
html页面上使用的不经常改变的资源
2.1不同文件资源
第三方框架文件、css文件、js文件、图片文件
'静态文件资源一般都会放在static文件夹内'
2.2当static目录下出现了很多不同类型的静态文件资源,还可以分类管理
others文件夹(第三方框架文件)
css文件夹(所有css文件)
js文件夹(所有js文件)
img文件夹(所有img文件)
3.对静态文件资源的访问也需要提前开设相应的接口
在文件同名文件夹下settings.py
STATIC_URL = '/static/' # 接口前缀(访问静态资源必须要以static开头)
# 静态文件资源配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
4.动态解析
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
请求方法
'URL:统一资源定位符(网址)'
1.GET请求
1.1朝别人索要数据,也可以携带而外的数据
在网址栏显示:url?xxx=yyy&aaa=bbb&ccc=ddd
1.2上述携带数据的方式有两个限制
数据只能是一些无关紧要的非敏感数据
数据大小有限制 2KB~4KB左右
'GET请求没有请求体(HTTP数据格式)
2.POST请求
朝别人提交数据,也可以携带额外数据
数据都在请求体中,并且数据大小没有限制
3.form表单默认的数据提交方式是get
3.1在html文件修改:<form action="" method="post">
method='post'
action>>>控制数据的提交地址
3.2action地址编写方式
方式1:不写,朝当前页面所在的地址提交
方式2:写后缀(/index/),自动补全ip和post
方式3:写全称(https://www.baidu.com/)
4.提交post请求前需要去配置文件中注释一行代码
在文件同名文件夹下settings.py文件里注释下列第四行
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',
]
request对象方法
request.method>>>获取请求方式,结果是纯大写的字符串
print(request.method)
# POST
request.POST>>>获取POST请求发送来的普通数据(不包括文件)
print(request.POST)
# <QueryDict: {'username': ['kevin', 'barry'], 'password': ['123']}>
request.POST.get()>>>默认只获取列表中最后一个数据值
print(request.POST.get('username'))
# barry
request.POST.getlist()>>>获取键对应的整个列表,无论有几个数据值
print(request.POST.getlist('username'))
# ['kevin', 'barry']
request.GET>>>获取url后面后面携带的非敏感数据
print(request.GET)
# <QueryDict: {'aaa': ['111'], 'bbb': ['333']}>
request.GET.get()>>>默认只获取列表中最后的一个数据值
print(request.GET.get('aaa'))
# 333
request.GET.getlist()>>>获取键对应的整个列表,无论有几个数据值
print(request.GET.getlist('aaa'))
# ['111', '333']
pycharm连接MySQL
1.查看pycharm提供的database按钮
左下角或侧边栏,若是没有则下载插件或卸载重装
2.首次连接数据库需要下载对应的驱动(点一下Download)
3.驱动下载好后,在user:的输入框内输入用户名,在password:输入框内输入密码,在Database:输入框内输入数据库库名,在点击Test Connection,测试能否连接到数据库,在点Apply、点OK即可
4.可以进行简单的增删改查
django连接MySQL
django默认使用的是sqliste3,但是这款数据库一般只用于本地测试,功能较少
1.在配置文件中修改配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 指定数据库软件名称
'NAME': 'db1', # 指定库名
'USER': 'root',
'PASSWORD': '321',
'HOST': '127.0.0.1',
'PORT': 3306,
'CHARSET': 'utf8'
}
}
2.指定连接MySQL的模块
django1.11版本需要在项目或者应用目录下的__init__.py中编写一行代码
import pymysql
pymysql.install_as_MySQLdb()
django2.2以上版本需要下载mysqlclient模块
django orm
1.ORM:对象关系映射
类>>>映射成>>>表
对象>>>映射成>>>记录
对象.属性>>>映射成>>>字段对应的值
'ORM让不会MySQL的python程序员使用python操作MySQL'
2.先去应用目录下的models.py编写模型类
# 类似于定义表名
class User(models.Model):
# 类似于定义主键(id int primary key auto_increment)
id = models.AutoField(primary_key=True)
# 类似于定义普通字段(name varchar(32))
name = models.CharField(max_length=32)
# 类似于定义普通字段(pwd int)
pwd = models.IntegerField()
3.数据库迁移/同步命令
2.1将models中有关数据库的操作记录下来(migrations文件夹)
python38 manage.py makemigrations、
2.2将操作真正影响到数据库中
python38 manage.py migrate
'当修改了models中与数据库相关的代码,都必须执行上述的命令'
ps:可以简写,在pycharm上方Tools中Run manage.py Task后可以只写makemigrations、migrate
4.表的主键在orm中可以不写,orm会自动帮你添加一个id的主键,如果需要的主键名称不是id,就需要自己创建
orm语法
1.查
models.User.objects.filter() 结果可以看成是一个列表套数据对象
'可以使用first()方法获取对象,如果没有值会返回None'
2.增
models.User.objects.create()
3.该
models.User.objects.filter(id=1).update(name='barry233')
4.删
models.User.objects.filter(id=4).delete()
5.实例
from app01 import models
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user_obj = models.User.objects.filter(name=username, pwd=password).first()
if user_obj:
print(user_obj.id) # 1
print(user_obj.name) # barry
print(user_obj.pwd) # 123
return HttpResponse('登录成功')
return HttpResponse('用户名或密码错误')
return render(request, 'login.html')
orm外键关联
1.一对多
外键字段建在多的一方
2.多对多
外键字段可以直接写在其中一张表中,orm会自动帮你创建第三张表
3.一对一
外键字段建在查询频率较高的表中
class Book(models.Model): # 书
title = models.CharField(max_length=32)
# 书于出版社是一对多,书是多
publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)
# 书于作者是多对多
authors = models.ManyToManyField(to='Authors')
class Publish(models.Model): # 出版社
pub_name = models.CharField(max_length=32)
class Authors(models.Model): # 作者
name = models.CharField(max_length=32)
# 作者与作者资料是一对一
detail = models.OneToOneField(to='Detail', on_delete=models.CASCADE)
class Detail(models.Model): # 资料
name = models.CharField(max_length=32)
标签:文件,models,request,django,MySQL,print,POST
From: https://www.cnblogs.com/riuqi/p/16644887.html