1.如何创建一个django项目?(基于windows)
版本:1.11
注意事项:
- 主机名不要使用中文
- 项目名不要使用中文
- 一个pycharm窗口只放一个工程(项目)
# 命令行创建
# 安装:
pip install django=1.11.11
# 检测是否安装成功
django-admin
# 创建django项目
django-admin startproject 项目名称
# 创建app(文件夹切换到项目名称下)
python3 manage.py startapp
# 启动django
python3 manage.py runserver
# 停止django
ctrl + c
命令行创建不会自动创建templates文件(存放html文件)。
命令行创建要手动添加templates的路径(settings文件下):
# pycharm创建
# 各文件用途
项目名文件:
:
应用名文件夹:
新建app需要在配置文件中注册:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config'
]
ps:pycharm能自动帮你创建一个app并自动注册到配置文件中
# django小白必会三板斧
HTTP Response:返回字符串
render:返回html并支持模板渲染
redirect:重定向 (既可以重定向别人的网址,也可以重定向自己的)
2.如何写第一个基于django的项目?
路由访问如果不加斜杠,会内部重定向加斜杠的路由。(手动添加斜杠会更快)
所有的html文件默认写下template文件夹下。
所有静态文件(css, js, 前端的第三方的库)默认放在static文件夹下。
html引入的两种方式(本地|cdn)。
# 带你手把手写登录注册功能
1.静态文件配置
# 静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
暴露给外界能够访问服务器静态文件夹下所有的资源。
STATIC_URL = '/xxx/
# 接口前缀 跟静态文件夹的名字没有半毛钱关系。
# 默认情况下这个前缀跟静态文件夹的名字一样。
#静态文件配置:
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'), # 就是你的静态文件夹路径
os.path.join(BASE_DIR,'static1'),
os.path.join(BASE_DIR,'static2')
]
# ps:会一次查找列表中所有静态文件的路径 找到的话立刻停止,没有找到返回404
2.form表单提交数据的动作两种方式:
<input type='submit'> <button></button>
form提交数据的地址如何指定方式:
action属性控制提交的地址的方式
1.全路径
<form action="http://127.0.0.1:8080/login/">
2.只写路径后缀
<form action="/login/">
3.不写(默认往当前路径提交)
form表单默认get请求。通过method控制请求方式。
3.根据客户端请求方式的不同执行不同的逻辑代码
def login(request):
print(request.method) # 拿到请求的方式
if request.method == "GET": # 获取用户提交的请求方式
return render(request, 'login.html')
elif request.method == "POST":
return Httpresponse("收到了 老弟")
# 按照下面这种方式写,减少代码冗余及结构混乱:
def login(request):
if request.method == "POST":
return HttpResponse("收到了,老弟")
return render(request, "login")
# 代码流程详解
def login(request):
if request.method == "POST": # 拿到的请求方式是大写的字符串
print("request.POST") # # request.POST:< QueryDict: {'username': ['jason'], 'password': ['123']} >
print(request.POST.get('username')) # value虽然是个列表但获取value拿到单个元素
# 默认只会取value列表里面的最后一个元素
# request.POST:<QueryDict: {'username': ['jason', 'egon'], 'password': ['123']}>
print(request.POST.getlist('username')) # 要想一次性获取value列表里面所有的数据需要用getlist()
print(request.POST.getlist('username')) # 一次性获取value列表所有的数据用getlist
print(request.POST['password']) # 不推荐使用该种方法获取数据
return HttpResponse('OK')
return render(request, 'login.html')
# ps: 使用getlist获取列表中所有元素 应用场景:用户的爱好,多选框
get只会获取到value列表的最后一个元素
4.django连接数据库
#要配置的文件:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day54',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'123'
}
ps:所有的键必须大写
# 告诉django用pymysql替换它默认mysqldb模块链接数据库
方式一:在你的项目文件下面的__init__.py
方式二:也可以在你的应用文件夹下面的__init__.py
# 固定写法
import pymysql
pymysql.install_as_MySQLdb()
5.orm
什么是orm?
orm对象关系映射
类 》》》 表
对象 》》》 表记录
对象的属性 》》》 一条记录某个字段对应的值
diango的orm不能自动帮助我们创建库,但是可以帮我们自动创建表。
一个django项目就是用一个库,不要多个django项目使用一个库。
数据库迁移(同步)命令
python3 manage.py makemigrations 将你的数据库变动记录到一个文件中,并不会帮你创建表
python3 manage.py migrate 将你的数据库变动同步到数据库中
在本地测试的时候将配置文件中的中间件去掉。
新增数据:(操作数据库user表插入数据)
# 方式一:
user_obj = models.User.objects.create(name=username, password=password)
# 方式二:
user_obj = models.User(name=username, password=password)
user_obj.save()
查询数据:
user_list = models.User.objects.all() # 获取user表所有的数据
print(user_list.query) # 只要是QuerySet对象就可以点query查看获取当前QuerySet对象内部sql语句
删除数据:
models.User.objects.filter(id=1).delete() # 将queryset所有的数据对象删除
修改数据:
# 方式一:
models.User.objects.filter(id=edit_id).update(name=username, password=password)
# 方式二:
user_obj = models.User.objects.filter(id=edit_id).first()
user_obj.name = username
user_obj.save()
在实现修改数据的功能上:所要编辑对象的id获取方式
# 方式一:利用input隐藏一个标签
<input type="hidden" name="edit_id" value = "{{user_obj.pk}}"
# 方式二:在form表单action中拼接路径
<form action="/edit/?edit_id={{user_obj.pk}}" method="POST">
ps: 注意在拼接路径的时候不要有空格(空格在路径里也算一个字符)
6.在模型层修改和表有关的所有数据,只要你修改了就必须执行数据库的迁移命令。
python manage.py makemigrations
python manage.py migrate
3.django的请求声明周期