Djang工程搭建基础

							**在搭建之前先要了解以下几点**
  1. 搭建环境 创建工程 创建应用 了解工程目录结构 定义视图与路由

需要创建django虚拟环境
环境准备:.mkvirtualenv 虚拟环境名称 -p python3
然后进入虚拟环境workon 虚拟环境名称
导入虚拟环境 : pip install -r 环境包(最下面待链接)

创建工程
1.进入到指定文件夹中,创建工程
django-admin startproject 项目名称

1.1.运行项目(需要在mange同级目录中执行)
python manage.py runserver
或者:python manage.py runserver ip:端口

创建子应用(作用: 为了模块化开发,管理不同的业务功能)
创建子应用(需要和mange.py是同级的)
python manage.py startapp 子应用名称

实例
第一个helloworld程序
编写流程:
1, 在子应用的views文件中创建视图函数

def hello_world(request):

    return HttpResponse("我是helloworld")

2, 在子应用中创建urls.py文件,并编写对应的路由信息
from django.conf.urls import url
from . import views

#配置视图函数所有的路径
urlpatterns = [

# 1,编写hellworld路径
#参数1: 路由路径, 参数2: 路径关联的函数
url(r"^hello/$",views.hello_world)

]

3,将子应用的路径配置到根应用的urls中

from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('users.urls'))
]

注意点: 一旦子应用注册到根应用之后,那么django不再提供默认的首页视图

项目的配置(settings.py文件)

  • 作用: 用来设置项目的配置信息(比如: 数据库,redis,session,白名单等等信息)
  • 常见的是:
    • BASE_DIR: 表示项目的位置
    • DEBUG: 默认是True, 好处: 代码改动之后自动部署, 报错之后有友好提示
    • 时区表示:
LANGUAGE_CODE = 'zh-hans' #默认是英文, 如果设置为中文(zh-hans)

TIME_ZONE = 'Asia/Shanghai' #表示时区,默认是格林尼治时间, 如果设置为Asia/Shanghai

5,静态资源访问
- 作用: 给项目提供静态资源(html,css,js,image等)
- 设置过程(settings.py)

```
#表示的是项目的静态文件访问的路径
STATIC_URL = '/static/'
#指定访问静态文件的路径
STATICFILES_DIRS=[os.path.join(BASE_DIR,"my_static")]

6路由参数名设置
作用: 在访问视图的时候可以传递动态参数

路由格式:
    # 2,编写路由,匹配参数
    #在地址中的正则表达式需要使用()括起来, 如果需要给正则表达式起名字,格式:(?P<名字>表达式)
    url(r"^params/(?P<city>.+)/(?P<year>\d{4})/$",views.params_function)

视图函数:
    # 2,编写路由,匹配参数
	def params_function(request,year,city):
   return HttpResponse("the city is %s, the year is %s"%(city,year))

7,url地址
作用: 保证匹配的时候能够顺利执行到正常的视图函数
注意点:在编写路由的过程中,只要严格限制了开头和结尾就不会有匹配混乱的问题

reverse反解析
作用: 通过设置的路由的名字,找到视图的路径
格式:

  • reverse(“namespace:name”)
  • namespace: 根应用路由名字, 可以省略,
    • 设置格式: url(r"^",include(“路径”,namespace=‘空间名’))
  • name: 子路由的名字
    • 设置格式: url(r"路径",视图函数,name=“路由名字”)
  • 好处:
    • 1, 防止不同子应用定义了同样的路径,而区分不开来 (了解)
    • 2, 可以通过设置的路由的名字,找到视图的路径,方便重定向

8,获取get请求查询参数

  • 作用: 只有获取了请求的查询参数,才能具体的知道前端需要什么样的资源
  • 格式:
    • request.GET, 得到的就是一个字典,不需要转换了
    • reques.GET.get(“key”)
    • reques.GET.getlist(“key”)
    • 注意点: django当中获取的request中的数据,可以一个键对应多个值

9,获取post提交的数据
作用: 获取post,put,delete,patch方式提交的内容(请求体内容)
表单提交的post的数据(字典)
request.POST
提交的post的json数据(json字符串)

  • 1, request.body, 得到的是bytes类型
  • 2, bytes类型转str类型, 使用decode()方法
  • 4, json字符串转dict, json.loads(jsonStr)
10,request对象中的其他参数
  • 其他常见的参数属性
    • request.method : 获取的是请求方式
    • request.user: 获取的是请求的用户,默认是匿名用户AnonymousUser
    • request.META: 获取的是请求header中的内容
11, HttpResponse对象[理解]
  • 作用: 为了给前端的浏览器响应数据
  • 创建方式:
    • response = HttpResponse(content=“内容”, content_type=“响应的类型”,status=状态码)
    • 设置响应头中的数据
      • response[“key”] = “value”
    • 几种常见的相应体对象
      • HttpresponseNotFound
      • Jsonresponse
      • HttpResponseForbidden
12, 重定向redirect[理解]
  • 作用: 重新定位资源的方向
  • 格式:
    • redirect(资源的地址)
      • 资源的地址可以是本地服务器的地址,也可以是外部地址
    • 注意点: 经常会和reverse配合使用
13, cookie[掌握]
  • 作用: 用来储存服务端和浏览器交互的数据
  • 场景: 一般做广告推送使用
  • 使用格式:
    • 设置cookie
      • response.set_cookie(key,value,max_age)
      • max_age:有效期,单位是秒,如果不设置默认就是一次浏览器会话结束
    • 获取cookie
      • request.COOKIE.get(“key”)
14, session[理解]
  • 作用: 用来做用户登陆状态保持的

  • 操作流程:

    • 1,安装redis

      • pip install django-redis
    • 2,配置session存储相关的信息(settings.py)

      #配置session存储的redis信息
      CACHES = {
              
              
          "default": {
              
              
              "BACKEND": "django_redis.cache.RedisCache",
              "LOCATION": "redis://127.0.0.1:6379/1",
              "OPTIONS": {
              
              
                  "CLIENT_CLASS": "django_redis.client.DefaultClient",
              }
          }
      }
      SESSION_ENGINE = "django.contrib.sessions.backends.cache"
      SESSION_CACHE_ALIAS = "default"
      

    • 3, 操作方式:

      • request.session[key] = value
      • request.session[key]
      • request.session.pop(key)
      • request.session.flush()
      • request.session.set_expiry(time) 通过ttl命令可以查看过期时间

猜你喜欢

转载自blog.csdn.net/weixin_44774466/article/details/88554907