前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第1节 初识Django框架

第1节 初识Django框架

原创
作者头像
用户9850757
发布2022-06-27 11:09:59
6540
发布2022-06-27 11:09:59
举报
文章被收录于专栏:Django 博客系统

配置相关属性

修改端口号

  • 指定端口号 python manage.py runserve 9527
  • 项目中修改端口号
    img.png
    img.png
  • 指定IP及端口 python manage.py runserve 0.0.0.0:9527
代码语言:txt
复制
需要在```settings.py```配置```ALLOWED_HOSTS```
代码语言:txt
复制
```ALLOWED_HOSTS = ['*']```表示外部所有ip都可以访问

查看ip地址

Win cmd命令行输入ipconfig

Mac 终端命令行输入ifconfig


创建模块

python manage.py startapp hello第一步:在views.py文件写一个函数

from django.http import HttpResponse

def hello_world(request):

代码语言:txt
复制
return HttpResponse('Hello Word!')
代码语言:txt
复制
2. 第二部:在```urls.py```配置规则
```python

from hello.views import hello_world

urlpatterns = [

代码语言:txt
复制
path('admin/', admin.site.urls),
代码语言:txt
复制
path('hello/', hello_world)

]

代码语言:txt
复制
-----
## URL的常用配置
#### ```path(route, view, name, **kwargs)```函数
*  route:URL匹配规则
*  view:视图函数
*  name:路由的名称
*  **keargs:其他参数
#### ```include(url, namespace)```函数
* 用于导入模块的```urls```列表
* urls:URL匹配规则列表
* namespace:命名空间
* 使用```path('hello/', include('hello.urls'))```导入模块url
-----
## URL的逆向解析
可以通过url的```name```名称,解析出URL链接 
```reverse('name')```

获取URL参数

输入URL

http://127.0.0.1:8000/aricle/05/

URL规则

代码语言:python
代码运行次数:0
复制
path('article/<int:month>',article_list, name='article_list')

正则表达式规则

代码语言:python
代码运行次数:0
复制
re_path(r'^article/(?P<month>0?[1-9]|1[012])/$',article_list, name='article_list')

视图编写

代码语言:python
代码运行次数:0
复制
def article(request, month):
    return HttpResponse('article:{}'.format(months))

获取get参数

输入URL

htttp://127.0.0.1:8000/serarch/?name=五月天

URL规则

代码语言:python
代码运行次数:0
复制
path('search/', search, name='search')

视图编写:

代码语言:python
代码运行次数:0
复制
def search(request):
    name = request.GET.get('name', None)

从文件响应HTML内容

模板修改settings.py配置项目文件的TEMPLATES的值为'DIRS': [BASE_DIR / 'templates']

  • 如果在模块下使用templates,需要进行模块安装,如下:
  • 模块安装settings.py配置项目文件的INSTALLED_APPS下添加模块名称hello

render_to_string()函数

render_to_string(template_name,context=None,request=None,using=None)template_name:模板名称context:模板的上下文对象(dict)request:请求对象using:模板引擎名称(如Jinja2)输入URL htttp://127.0.0.1:8000/hello/render/str/ URL规则

path('render/str/', render_str, name='render_str'),

代码语言:txt
复制
视图编写:
```python

def render_str(request):

代码语言:txt
复制
"""render_to_string 函数的使用"""
代码语言:txt
复制
templ_name = 'index.html'
代码语言:txt
复制
html = render_to_string(template_name=templ_name)
代码语言:txt
复制
return HttpResponse(html)
代码语言:txt
复制
### render()函数
```render(request, template_name,context=None,content_type=None,status=None,using=None)```
  • request:请求对象
  • template_name:模板名称
  • context:模板的上下文对象(dict)
  • content_typ:MIME类型,默认为text/html
  • status:HTTP状态码
  • using:模板引擎名称(如Jinja2)

输入URL

htttp://127.0.0.1:8000/hello/render/html/

URL规则

代码语言:python
代码运行次数:0
复制
path('render/html/', render_html, name='render_html'),

视图编写:

代码语言:python
代码运行次数:0
复制
def render_html(request):
    """render 函数的使用"""
    return render(request, 'index.html')

请求响应对象

请求对象HttpRequest

  • 请求方式 method(POST/GET/...)
  • 请求头信息 META/headers
    • REMOTE_ADDR——请求的IP地址
    • HTTP_USER_AGENT——用户请求终端信息
  • 获取请求传递参数
    • GET——GET请求参数
    • POST——POST请求参数
    • COOKIES——cookies信息
    • FILES——文件信息

输入URL

http://127.0.0.1:9527/hello/http/req/

URL规则

代码语言:python
代码运行次数:0
复制
path('http/req/', http_request, name='http_request'),

视图编写:

代码语言:python
代码运行次数:0
复制
from django.http import HttpResponse
def http_request(request):
    """请求练习"""
    # 1. 请求方式
    print(request.method)
    # 2. 请求头信息
    header = request.META
    print(header)
    ua = request.META.get('HTTP_USER_AGENT', None)
    print(ua)
    print(request.headers)
    print(request.headers['User-Agent'])
    print(request.headers['user-agent'])
    # 3. 获取请求参数
    name = request.GET.get('name', '')
    print(name)
    return HttpResponse('响应')

响应对象 HttpResponse

  • HttpResponse
  • HttpResponseRedirect——重定向
  • JsonResponse——响应json
  • FileResponse——响应文件
HttpResponse
  • status设置HTTP响应状态码
  • status_code查看HTTP响应状态码
  • content_type设置响应的类型
  • write()写入响应内容
JsonResponse

URL规则

代码语言:python
代码运行次数:0
复制
path('http/json/', http_jsonresp, name='http_jsonresp'),

视图编辑:

代码语言:python
代码运行次数:0
复制
from django.http import JsonResponse
def http_jsonresp(request):
    """Json响应练习"""
    user_info = {
        'name': '张三',
        'age': 35
    }
    return JsonResponse(user_info)
FileResponse

URL规则

代码语言:python
代码运行次数:0
复制
path('http/file/', http_fileresp, name='http_fileresp'),

视图编辑:

代码语言:python
代码运行次数:0
复制
from django.http import FileResponse
def http_fileresp(request):
    """File响应练习"""
    return FileResponse(open('myfile.png', 'rb'))

常见的Content-Type

  • text/html —— 超文本标记语言文本(HTML)
  • text/plain —— 普通文本
  • text/xml 一 XML文档
  • image/png、image/jpeg、image/gif 一 图片或图形
  • application/json 一 json数据类型

视图快捷方式

  • 使用HttpResponseRedirect重定向
  • 使用redirect()快捷方式

视图编辑:

代码语言:python
代码运行次数:0
复制
def article_detail(request, article_id):
    if article_id < 1000:
        # return HttpResponseRedirect(reverse('no_data_404'))
        return redirect('no_data_404')   # 视图函数名称
    return HttpResponse('文章{}的内容'.format(article_id))

内置的视图及重写

内置的错误处理视图

  • 400 Bad Request
  • 403 Forbidden
  • 404 Not Found
  • 500 Internal Server Erro

重写内置的错误处理视图

  • 在项目urls.py中添加配置
  • handler500 = "my project.views.page 500"
    • handler400
    • handler403
    • handler404
  • 切换到生产模式 DEBUG=False

settings配置

代码语言:python
代码运行次数:0
复制
DEBUG=False

URL规则

代码语言:python
代码运行次数:0
复制
handler500 = "my_appv.views.page_500"

视图编辑:

代码语言:python
代码运行次数:0
复制
from django.http import HttpResponse
def page_500(request):
    return HttpResponse('服务器正忙,请稍后重试!')

static.serve处理静态文件

  • 在项目settings.py中添加配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR,'medias')from django.views.static import serve urlpatterns += [ re_path(r'^media/(?P<path>.*)$', serve, { 'document_root':settings.MEDIA_ROOT, }), ]
  • 在项目urls.py中添加配置

使用class重写视图

举例:TemplateView

  • 步骤一:继承视图
    • django.views.generic.TemplateView
  • 步骤二:配置模板地址
  • 步骤三:配置URL
内置通用视图
  • django.views.generic.ListView
    • 列表类数据的封装,如:景点列表,支持分页
  • django.views.generic.DetailView
    • 详情类数据的封装,如:景点详情

输入URL

htttp://127.0.0.1:8000/hello/home/

URL规则

代码语言:python
代码运行次数:0
复制
path('home/', HomeView.as_view(), name='home')

视图类编辑:

代码语言:python
代码运行次数:0
复制
from django.views.generic import TemplateView
class HomeView(TemplateView):
    template_name = 'home.html'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置相关属性
    • 修改端口号
      • 查看ip地址
      • 创建模块
        • 获取URL参数
          • 获取get参数
            • 从文件响应HTML内容
              • render_to_string()函数
            • 请求响应对象
              • 请求对象HttpRequest
              • 响应对象 HttpResponse
              • 常见的Content-Type
            • 视图快捷方式
              • 内置的视图及重写
                • 内置的错误处理视图
                • static.serve处理静态文件
              • 使用class重写视图
                • 举例:TemplateView
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档