一天快速入门Django:从0到1构建属于自己的Web应用

DjangoWeb开发

Day1

1. Django的安装

pip install django

2. 创建项目

2.1 终端创建
“python环境路径\scripts\django-admin.exe” startproject django项目名
# 如果python环境路径配置了环境变量,可直接写
django-admin startproject django项目名
2.2 pycharm创建
2.3 项目文件介绍
django_study_demo
│─ manage.py			【项目管理的脚本,不要修改,eg:启动、创建app、数据库管理等】
└─django_study_demo		【与项目同名的文件夹】
     │─ asgi.py			【和wsgi.py一起,接收网络请求的】【不用修改】【Django接收异步的】
     │─ settings.py		【项目的配置文件,eg:数据库连接信息、注册app等】【常操作】
     │─ urls.py			【全部的URL和函数的对应关系】【常操作】
     │─ wsgi.py			【和asgi.py一起,接收网络请求的】【不用修改】【Django接收同步的】
     │─ __init__.py

3. 创建app

3.1 Pycharm命令行创建
python manage.py startapp app名
3.2 app目录介绍
django_study_demo
│  manage.py
├─django_study_demo
│     asgi.py
│     settings.py
│     urls.py
│     wsgi.py
│     __init__.py
└─index						【app名命名的文件夹】
    │  admin.py				【固定的不用动】django默认提供的后台管理,但实际开发不常用
    │  apps.py				【固定的不用动】app启动相关
    │  models.py			【☆很重要,对数据库进行操作】这里不用SQL写了,Django封装了ORM供调用
    │  tests.py				【固定的不用动】用来单元功能测试的,个人小项目可以不用管
    │  views.py				【☆很重要,撰写视图函数(得我们自己写的)】
    │  __init__.py
    └─migrations			【固定的不用动】数据库变更记录,会自动生成文件,我们不用动
            __init__.py

4. 快速上手

4.1 确保app已注册
  1. 在settings.py的列表变量INSTALLED_APPS中,添加一个 ‘app名’ ,添加新app
4.2 URL和函数的映射
  1. 找到urls.py中列表变量urlpatterns , 添加一行path(’ ’ , )

    path('', include(("index.urls", 'index'), namespace='index')),
    
  2. path(param1 , param2 , param3 )需要三个参数

    param1 : URL
    param2 : views.py的视图函数
    param3 : 命名空间,方便后续模板层调用
    
4.3 视图函数的撰写

修改相应app下的views.py

注意点:

1.django中的视图函数必须带request参数
2.视图函数必须return,一般返回的都是要传给前端的数据
def index(request):
	return HttpResponse("hello, World")
4.4 运行Django

命令行启动django项目:

python manage.py runserver 127.0.0.1:8008
4.5 创建页面

如果还要创建新的页面,只需要两个步骤:

  1. views.py中撰写相应函数
  2. urls.py中定义URL和函数的对应关系
# 增加部分
# urls.py
path('user/add/', views.user_add),
path('user/delete/', views.user_del),

# views.py
def user_add(request):
    return HttpResponse("用户添加")

def user_del(request):
    return HttpResponse("用户删除")

4.6 模板文件&静态文件&媒体文件
4.6.1 render()使用
def user_list(request):
	# param1:request参数 , param2:html文件路径
	return render(request,"user_list.html")
4.6.2 模板路径问题
  1. 找到settings.py中TEMPLATES列表变量,修改"DIRS": [BASE_DIR/‘templates’]

    #配置模板路径
    TEMPLATES = [
        {
         
            "BACKEND": "django.template.backends.django.DjangoTemplates",
            "DIRS": [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",
                ],
            },
        },
    ]
    
  2. 在django项目根目录创建templates文件夹

4.6.3 静态文件static
  1. 找到settings.py,配置静态文件

    #配置静态文件
    STATIC_URL = "/static/"
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'pstatic'),
    )
    
  2. 在django项目根目录创建pstatic文件夹

  3. 在pstatic文件夹下创建img、css、js、plugins(插件:如Bootstrap:前端开发CSS框架)文件夹存放对应内容

注意点总结:

  • 声明static语法:{% load static %} 要写在顶部,写在html文件开头
  • 声明static的原理:
    1. 声明static会从settings.py中的STATIC_URL去找
  • 调用语法:{% static ‘…’ %},其中 … 是静态文件的路径
  • 用{% … %}的优点:
    1. 比较规范(符合Django模板开发规范)
    2. 修改static文件路径时,方便修改(只需要改settings.py即可)
4.6.4 媒体文件
  1. 在settings.py 中配置媒体文件

    #配置媒体文件
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
  2. 在django项目根目录中创建media文件夹

  3. 在目路由中配置media路由

    # 配置媒体资源的路由信息
    re_path('media/(?P<path>.*)', serve, {
         'document_root': 	       settings.MEDIA_ROOT},name='media')
    
  4. 运行django项目,可通过url访问媒体资源 测试

5. Django模板语法

本质:在html中写一些占位符,然后由数据对这些占位符进行替换和处理

PS:上面提到的占位符 static 就是和 /static/ (settings.py中STATIC_URL 的值) 做了替换

5.1 调用后端数据
  1. render()函数 --> param3:向模板层传递数据,不过必须是字典
  2. 模板层 --> 通过{ { … }}的语法根据键名来调用相应的数据
5.2 索引

对于列表数据,通过{ { 列表名.索引 }} 获取数据( 和python不同 , python是通过 [] )

5.3 循环语句

语法:

{% for i in ... %}
	...
{% endfor %}
  • 对于列表数据:

    • 循环使用即可
  • 对于字典数据:

    • 跟python一样,有keys、values、items
    • 唯一不同:for foo in user_info.keys() -->不要带括号
5.4 条件语句
{% if name == "XXX" %}
	...
{% elif name == "XXX" %}
	...
{% else %}
	...
{% endif %}

和python一样,就是不用加 : , 结束必须带个 {% endif %},其他都一样

5.5 模板语法原理

原理:

  1. render( ) 读取带有模板语法的html文件
  2. django内部进行渲染 ( 模板语法执行并替换成数据 )
  3. 最终得到只包含html标签的字符串
  4. 将渲染完成的字符串传给用户浏览器

6. Request & Response

即请求和响应

6.1 Request

request就是一个对象,封装了用户通过浏览器(爬虫等许多途径)发送过来的所有请求相关的数据,常用的有:

  • request.method : 获取用户请求提交方式(GET/POST)
  • request.GET : 获取通过URL传递的参数
  • request.POST : 通过请求体获得数据
6.2 Response

视图函数中return所返回的,就是我们要写的response,常用的有:

  • HttpResponse( ) : 返回内容字符串给请求者

  • render ( ) : 读取HTML,并渲染,最终以字符串的格式返回给用户浏览器

  • redirect( ) : 让浏览器重定向到其他页面,返回的是网址

    Q: 重定向这个过程是怎么样的?
    A: 浏览器提交请求给Django,Django收到请求并直接返回给浏览器重定向的网址,浏览器重新去新的网址那里提交请求,然后新的网址给浏览器返回响应数据
    
6.3 练习

做一个简单的登录功能:

  1. 先简单做一个登录页面

  2. 设置路由、视图函数、以及映射关系,访问相应URL测试

  3. 设置form表单的提交地址是触发视图函数login( ) , 而且采用post请求

  4. 撰写login( ) 中的代码逻辑

    def login(request):
    	if request.method == "GET":
    		return render(request,"login.html")
    	elif request.method == "POST":
    		post_data = request.POST
    		print(post_data)
    		return redirect("https://www.baidu.com")
    

    PS : 浏览器一开始访问login.html(GET请求),视图函数login( )就render渲染login.html;填写完 form表单点击提交,再次访问就是POST请求了

  5. 测试功能

    这段代码复刻到flask是没有问题的,在django中会报错,因为django自带了一个csrf,一个安全机制
    解决方法:在form表单中,添加一行占位符:{% csrf_token %}
    

    PS : django内部对其渲染时,将其渲染为一个隐藏输入框,并提交一个csrfmiddlewaretoken参数,值为一个列表,列表中有一个值:自动生成

7. 数据库操作 ORM

ORM:封装了连接数据库的语句和SQL语句( 不用自己去写 ),而且增加了安全机制

7.1 安装第三方模块

新版本的django默认采用mysqlclient这个库

pip install mysqlclient
7.2 ORM

ORM可以帮我们做两件事:

  • 增删改查数据库中的表(不用写SQL语句)【但数据库得自己建】
  • 操作表中数据,即增删改查表中记录(不用写SQL语句)
7.2.1 创建数据库
  • 启动MySQL服务(默认都是开的)
  • 创建数据库
7.2.2 django连接数据库

django连接数据库只需要在 settings.py中 DATABASES字典 配置连接参数即可

#配置数据库
DATABASES = {
   
    "default": {
   
        "ENGINE": "django.db.backends.mysql",
        "NAME": 'stock_allocation_system',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
7.2.3django操作表
  • 创建表
  • 删除表
  • 修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值