django框架功能探索

本文详细介绍了如何在Windows环境下使用Django 1.11创建项目,包括项目与应用的搭建、基本功能实现如登录注册,以及数据库配置与ORM操作等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.如何创建一个django项目?(基于windows)

版本:1.11

注意事项:

  1. 主机名不要使用中文
  2. 项目名不要使用中文
  3. 一个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的请求声明周期

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值