django学习(1)

编程入门 行业动态 更新时间:2024-10-25 02:23:27

<a href=https://www.elefans.com/category/jswz/34/1767634.html style=django学习(1)"/>

django学习(1)

django学习

前端效果不想写,可以去jq22下载。

若数据库使用MySQL,在setting同级目录下__init__文件中添加:

import pymysqlpymysql.install_as_MySQLdb()

一、获取django

安装django:

    pip install django

创建一个django项目:

    django-admin startproject [your project Name]

在创建的项目目录下创建自己的APP应用:

    python manage.py startapp [your app Name]

运行项目:

    python manage.py runserver

当运行其他人的项目或者迁移项目时,迁移数据库:

    python manage.py makemigrationspython manage.py migrate

出现下图即为运行成功:

二、django项目目录介绍

如下图所示:

settings.py保存django的配置信息,列如数据库和HTML的存放目录(见下图):

可以从注释中的链接查看官方文档,获取写法。

DIRS便是存放html的目录。

urls设置路由,当浏览器访问时,首先调用此文件,按照请求路径进行匹配。


以上是django的主目录,下面创建一个应用,即真正需要我们实现业务逻辑的位置

migrations是存放关于生成数据库表的目录,在执行

    python manage.py makemigrationspython manage.py migrate

时自动生成。

views.py写业务逻辑。

models.py模型是关于您的数据的单一的、确定的信息来源。它包含您存储的数据的基本字段和行为。通常,每个模型映射到单个数据库表。

admin是django自带的用来让你进行数据库管理的web app.提供了很多定制化功能,你甚至可以用它来进行公司内部的内容管理。


HttpResponse

1.下载

def download(request):f = open(r"path")response = HttpRespose(f.read(), content_type = "(此处根据你的文件格式查询MIME)")response['Content-Disposition'] = 'attachment;filename="NAME.后缀"'return response

2.重定向

HttpResponseRedirect(‘路径’)


views中
类方式

from django.views import Viewclass Demo(View):def get(self, request):return HttpResponse('babababa...')

在urls中,path(‘path’, views.mothed) mothod只能是方法,直接写Demo会报错,应该path(‘path’, views.mclass.as_view())

settings.py介绍

数据库连接

数据库设置必须配置默认数据库;也可以指定任意数量的附加数据库。

DATABASES = {'default': { #默认数据库'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}

当连接到其他数据库后端(如MariaDB, MySQL, Oracle, or PostgreSQL)时,将需要额外的连接参数。有关如何指定其他数据库类型,请参阅下面的 ENGINE设置。本示例用于PostgreSQL:

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', #根据不同数据库更改'NAME': 'mydatabase', #连接到的创建的数据库名字'USER': 'mydatabaseuser', #数据库登录名'PASSWORD': 'mypassword','HOST': '127.0.0.1', #数据库地址'PORT': '5432', #数据库端口}
}

ENGINE

  • ‘django.db.backends.postgresql’
  • ‘django.db.backends.mysql’
  • ‘django.db.backends.sqlite3’
  • ‘django.db.backends.oracle’

静态文件

在django中,静态文件为CSS、JS、Image。在srttings.py文件中,设置属性为:

from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parentSTATIC_URL = '/static'  #请求url路径
STATICFILES_DIRS = [BASE_ DIR / 'path',] #静态文件在项目中的路径

views.py

from django.shortcuts import render,HttpResponsedef OurMothedName(request):return HttpResponse("Your String")def render_Test(request): #必须要有request参数return render(request, 'our_html.html')

HttpResponse一般用来直接返回字符串,当然也可以返回类似这样:"<h1>html字符串</h1>",浏览器会自动解析。

render则用来返回一个html文件。

request参数

包括了一些请求信息。常用属性:

  • mothed
  • POST

request.mothed是一个字符串,表示浏览器请求方式,一般有:

request.mothed

  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • PATCH
  • OPTIONS
  • TRACE

request.POST是一个字典,可以用浏览器传过来的参数名获取:

    request.POST['username']

models.py

    from django.db import modelsclass User_Table(models.Model): #必须继承models.Modeluesrname = models.CharField(max_length = 64)password = models.CharField(max_length = 64)

一个类就代表了一张表,里面的属性代表了字段,像username便是创建了一个最大长度为64的字符字段。

现在数据库还是没有的,需要执行数据库迁移命令:

    python manage.py makemigrationspython manage.py migrate

执行完成后,数据库就改完了。

Django模板系统

在上面settings.py中曾提到模板属性作用,这里的模板也是与html相关联的。有两种特殊符号{{ }}和{% %},如果学过jsp可能更能体会到相似。

{{ }}表示变量,在模板渲染时替换成值。{% %}表示逻辑相关的操作。点 . 用来获取对象属性。

比如在html中:

<body>{{ var_name }}
</body>

在渲染时便可替换:

    def RenderHtml(request):return render(request, 'html.html', {'var_name' : value,})

若变量为一个列表,可以在在HTML中直接“变量名.索引”:
var_name.0 等价于在python中var_name[0],若为字典,则“变量名.key”即可。 html中 . 后面可以加方法,不加括号,既然不能加括号,那么便无法传递参数,所以自定义方法不能加参数。 若字段冲突,.会按照:“字典关键字查询、属性方法名查询、按数字索引查询”这种顺序查询。

过滤器

{{ 变量名|filter_name:参数}}
“:”左右不加空格。

自定义过滤器
  1. 在app下创建一个名为templatetags包(包的名字不能错)
  2. 创建一个python文件,文件名自定义(mytags.py)
  3. 在python文件中写:
from django import  templateregister = template.Library() #register名字不能错
  1. 写函数+装饰器
    函数只能有一个或两个参数,第一个表示变量,第二个表示给过滤器的参数。
@register.filter
def demo_mothed(value, arg):return "随便"

在模板中使用:

{% load mytags %}{{ var_name|demo_mothed:par }}
母板和继承

可以继承一个html。

{% entends 'extend.html' %}
<!--'extend.html'带引号,否则会被当成一个变量,若作为变量使用,可以在后台控制页面继承某个母版 -->
{% block block_name %}<!-- 这里写自己的代码 -->
{% endblock %}<% include  'content.html'%>
<!-- 包含过来 -->

母板包含页面公共部分,定义多个block块供子页面覆盖。

Cookie登录后保存登录状态

cookie保存在本地的一组键值对。

def login(request):if request.mothed == 'POST':user = request.POST['user']pwd = request.POST['password']if user == 'bla' and pwd == 'lalala':ret = redirect('direct.html')ret.set_cookie('key', 'value')return retreturn render('login.html ')

装饰器

DRF,restful理念框架

新建一个serialzers.py

from rest_framework import serializersfrom .models import modelNameclass modelNameSerializer(serializers.ModelSerializer):class meta:model = modelName #指定序列化从哪个模型映射字段fileds = '__all__' #映射哪些字段

在view.py中

    from rest_framework.viewsets import ModelViewSetfrom .serialzers import modelNameSerializerclass Mclzz(ModelViewSet):#指定查询集queryset = modelName.objects.all()#指定序列化器serializer_class = modelNameSerializer

在urls.py中,原本的urlpatterns都不用再写。

from rest_framework.routers import DefultRouter
from . import viewsurlpatterns = []router = DefultRouter()
router.register(r'', views.Mclzz)
urlpatterns += router.urls

Serializer构造方法:Serializer(instance=None,data=empty, **kwarg)

将模型传入,便是将模型转换为字典:Serializer(modelClassIntance)。

将json数据传入,便是反序列化,即可将json转换为模型。
序列化器中字段个数可以与models中不同但是存在字段名称必须相同。

反序列化

反序列化之前,需要调用is_valid()校验,若正确,则返回True,errors:返回字典,包含错误信息。验证成功,validated_data返回数据。

当然,在调用校验时指定参数is_valid(raise_exception=True),便会直接抛出异常并打印错误信息。

校验完成后,调用save()方法。会执行序列化器的create或丿update方法。

额外追加校验逻辑

在序列化器类中中定义方法validate_ + ‘想额外校验的字段名’ :

    from rest_framework import serializersclass clzz(serializers.Serializer):name = serializers.CharField(max_length = 64)#validate_字段名 def validate_name(self, value):#value是值if 'ss' not in value.lower():raise serializers.ValidationError("ss不存在")return value#联合校验def validate(self, attrs):#attrs是前端传过来的字典return attrs#也可以在定义字段中指定validator参数password = CharFeild(max_length = 32, validator = [check_function])

更多推荐

django学习(1)

本文发布于:2024-02-25 15:40:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699468.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:django

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!