djiango的安装及用法
Posted tuzaizi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了djiango的安装及用法相关的知识,希望对你有一定的参考价值。
版本问题 推荐你使用1.11
确保django能够正常启动需要注意:
1.计算机的名称不要有中文
2.项目名不要起中文
3.一个pycharm窗口就只放一个工程(项目)
安装
命令行 pip install django==1.11.11 测试是否安装成功:django-admin 创建django项目 django-admin startproject 项目名称(不要用中文) 项目名文件夹 __init__.py settings.py 配置文件 urls.py 路由与视图函数对应关系 wsgi.py manage.py 创建app python3 manage.py startapp 应用名 应用名文件夹 __init__.py admin.py django后台管理 models.py 模型表 views.py 视图函数(不一定就是函数也可以是类) 启动django python3 manage.py runserver 停止django项目 ctrl+c ps:命令行创建不会自动创建templates文件夹
TEMPLATES = [ ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, ‘DIRS‘: [os.path.join(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‘, ], , , ]
pycharm创建
new project 选django 选本机解释器 勾选admin后台管理
pycharm创建django项目
new projet 选django(前提是你已经下载了django了)
1.解释器的选择
2.自动创建app(自动帮你注册到配置文件中)
3.会自动帮你新建一个templates文件夹(自动帮你注册到配置文件中)
创建应用
python3 manage.py startapp 应用名
Tools里面的run manage.py task
注意:新建的app一定要在配置文件中先注册(******)
启动项目
python3 manage.py runserver
绿色小箭头启动(可以修改端口号)
注意:不要一次起多个django项目(同一个端口下)(******)
app的概念
一所大学里面有很多学院,每个学院都有自己独特的功能
注意你新建的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并自动注册到配置文件中
登录功能
1.路由访问如果不加斜杠 会内部自动重定向加斜杠的路由
所有的html文件默认都写在templates文件夹下
所有的静态文件(css,js,前端第三方类库)默认都放在static文件夹下
html页面引入外部资源的方式
cdn
本地
静态文件配置 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
form表单触发提交数据的动作两种方式 <input type="submit"> <button></button>
form提交数据的地址如何指定及方式?
action属性控制提交的地址
方式:
1.全路径 <form action="http://127.0.0.1:8000/login/"> 2.只写路径后缀 <form action="/login/"> 3.不写 (默认往当前路径提交) form表单默认是get请求
根据客户端请求方式的不同执行不同的逻辑代码 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(‘OK‘) return render(request,‘login.html‘)
def login(request): # 获取用户端提交的请求方式 print(request.method) # 拿到的请求方式是全大写的字符串 # if request.method == ‘GET‘: # return render(request,‘login.html‘) # elif request.method == ‘POST‘: # return HttpResponse("收到了 老弟") if request.method == ‘POST‘: print(request.POST) # 你就把它当成一个大字典里面存放了客户端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() # [‘jason‘, ‘egon‘] print(request.POST[‘password‘]) # 不推荐使用该方法获取数据 return HttpResponse(‘OK‘) return render(request,‘login.html‘) 获取value列表里面所有的元素需要使用getlist 应用场景:用户的爱好 多选框 get只会获取到value列表的最后一个元素
print(request.GET) # <QueryDict: ‘username‘: [‘jason‘], ‘password‘: [‘123‘]> request.GET.get(‘user‘) # <QueryDict: ‘username‘: [‘jason‘,‘egon‘], ‘password‘: [‘123‘]> request.GET.getlist(‘username‘)
django连接数据库 1.需要修改配置文件 DATABASES = ‘default‘: ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘: ‘数据库名‘, ‘HOST‘:‘127.0.0.1‘, ‘PORT‘:3306, ‘USER‘:‘root‘, ‘PASSWORD‘:‘123‘ ps:键必须都是大写
2.告诉django用pymysql替换它默认mysqldb模块连接数据库
方式1:在你的项目文件夹下面的__init__.py
方式2:也可以在你的应用文件夹下面的__init__.py
# 固定写法
import pymysql
pymysql.install_as_MySQLdb() # 告诉django用pymysql代替mysqldb连接数据库
什么是ORM?
对象关系映射
类 》》》 表
对象 》》》 表记录
对象的属性 》》》 一条记录某个字段对应的值
django的orm不能够自动帮你创建库,但是可以自动帮你创建表
提示:一个django项目就使用一个库,不要多个django项目使用一个库
数据库迁移(同步)命令(******)
python3 manage.py makemigrations 将你的数据库变动记录到一个小本本上(并不会帮你创建表)
python3 manage.py migrate 将你的数据库变动正在同步到数据库中
新增数据
# 操作数据库user表插入数据 # 方式1: user_obj = models.User.objects.create(name=username,password=password) # 方式2: user_obj = models.User(name=username,password=password) user_obj.save() # 对象调用save方法保存到数据库
查询数据
user_list = models.User.objects.all() # 获取user表所有的数据 # 只要是QuerySet就可以点query查看获取到当前QuerySet对象的内部sql语句 print(user_list.query)
利用a标签href属性 可以指定页面跳转的路径 href可以写全路径 但是推荐写后缀即可 <a href="/reg/" class="btn btn-success">添加数据</a> # 注意 路径的书写一定要加斜杠 重定向 可以写别人的网址也可以是自己的路径 return redirect(‘/userlist‘) return redirect(‘/userlist/‘)
queryset对象支持索引取值 但是不推荐你使用 推荐使用自带的.first()帮你获取第一条数据
删除
models.User.objects.filter(id=1).delete() # 会将queryset所有的数据对象全部删除
查询数据需要注意的是你获取到的到底是一个queryset还是一个数据对象 user_query = models.User.objects.filter(id=edit_id).first() # 如果你是要获取数据对象first千万别忘了 # filter当条件不存在的情况下会返回一个空的queryset对象 <QuerySet []> <class ‘django.db.models.query.QuerySet‘> user_obj = models.User.objects.get(id=edit_id) # 用get可以直接获取到数据对象本身但是查询条件不存在的情况下直接报错
编辑
编辑对象的id的获取方式 方式1:利用input隐藏一个标签 <input type="hidden" name="edit_id" value=" user_obj.pk "> 方式2: <form action="/edit/?edit_id= user_obj.pk " method="post"> 注意:queryset对象点修改 删除 会作用于对象内部所有的数据对象 类似于批量操作 方式1: models.User.objects.filter(id=edit_id).update(name=username,password=password) 方式2:获取到当前数据对象 user_obj = models.User.objects.filter(id=edit_id).first() user_obj.name = username user_obj.save()
修改模型层里面的跟表相关的所有的数据,只要你修改了就必须重新执行数据库迁移命令
python manage.py makemigrations 记录到小本本上
python manage.py migrate 真正操作数据库
以上是关于djiango的安装及用法的主要内容,如果未能解决你的问题,请参考以下文章
linux+python+djiango+nginx编译安装
linux+python+djiango+mysql编译安装学习笔记
linux+python+djiango+mysql编译安装学习笔记