django学习笔记

https://app.yinxiang.com/shard/s25/nl/28422925/530a570f-9b9f-4e49-a644-a077b3d700e4/

django是一个mvt的模式
和传统的web框架其实差不多·只是表述方式不一样
M是Models.py是用来做操作数据库的相关操作的
v是view.py是用来写对应的操作逻辑的将html文件展示给用户
T是TEMPLATES是用来放置html文件的地方·
如何简单允许一个django项目

  1. pip install django==2.0.2 安装django
  2. cd desktop 进入到桌面路径
  3. django-admin startproject wordcount 创建新项目wordcount
  4. cd wordcount
  5. python manage.py runserver 运行manage.py 启动web服务器 crtl+Break可以http://127.0.0.1:8000/关闭服务器
    ps 建立一个app python manage.py startapp (app的名字)
  6. 在浏览器打开 这是我们的网站主页
  7. 设置cmd快捷方式起始位置为桌面的工程文件夹
    1.当启动好后,要在文件夹下的urls.py下面进行配置网页 ps 这个第一个要进行配置的地方·根据用户输入不同url会访问不同的函数

第一个参数是代表用户在网页上端输入的内容,第二个参数是当用户输入这个参数的时候会执行的函数

urlpatterns = [
path(’’, function.home),
re_path(r’^article/2003KaTeX parse error: Expected 'EOF', got '#' at position 14: ',view.home) #̲ 1.0版本的re_path用…’,view.home) # re_path可以利用组的方式去传递匹配的参数 # home(request,“匹配出的参数”)
ps 也可进行传递多个参数·在view中的视图函数中进行使用
在view进行使用的时候·要按顺序进行接收·但是接受时的名字没有限制
还可以不用按照顺序的接受但是这个时候·就必须要用固定的名字
re_path(r’^article/(?p[0-9]{4})/$’,view.home) # 这个参数的名字被固定了·接收的时候只能用year进行接收
]
ps
1.若要从url中捕获一个值(匹配一个值)·只需要在它两边放置一对圆括号
2.不需要添加一个前导的反斜杠·因为每个url都有

分发
当你的app很多的时候·很容易混乱·可以进行分发的使用·当用户输入时会到其想要访问的app下面去进行下一步的匹配
而不是在主的url里面进行统一的分配
1.在主的url.py写一条语句
path(‘blog/’, include(‘blog.urls’)) ps 当浏览器解析到blog时·会到这个app下面的url.py去进行进一步精确的匹配
2.在blog·app下面写上其app独有的匹配规则·匹配规则可以和其它app重复·因为它已经有了前置的条件

'django.middleware.csrf.CsrfViewMiddleware 在setting.py中禁用这句话 原因是django中的一个保护机制我们现在用不到它

from django.shortcuts import render,HttpResponse # 首先从django框架内导入要是使用的函数
def home(request): # 写出函数的功能 request是url.py里面自动传入的·在这里必须要就行接收
return render(request, ‘home.html’,“在html想要操控的数据名”:python中的变量名) # 这个就是当用户访问的时候给用户显示一个home.html
或者不回应网页直接回应响应
return HttpResponse(‘ok’)

3.在settings.py中的TEMPLATES下面写上html文件下哪个文件下面找,并且自己进行创建

  1. 新建一个html文件,叫home.html
  2. 写出想要给用户显示的内容

大项目要避免网址名·网页名冲突
给个前缀
建立个新的文件夹在templates下·以app的名字来命名
templates/app的名字/网页名字
view.py --> return --> render(request, “todolist/home.html”)


想改网址的时候,但是要改的地方会非常多(很多需要跳转到这个网页上)
给网页起名字
path(‘home’, view.home, name=‘主页’)_

网址名字和其他app里面的网址名字重复
给个前缀
url.py --> app_name —> ‘todolist’

from django.urls import reverse

反向解析
因为我们path·访问条件会变化·所以我们在html中进行再次访问的时候不能够写死
可以在path后面再加一个参数名字·
path(‘login/’,views.login,name=“log”)
后面html想要再次访问这个login页面的时候
使用{% url ‘log’ %} 进行访问
我们也可以在view.py中使用反向解析拿到url值
但是当我们的path前面不是一个固定的值而是一个正则·我们需要用参数进行代替否则会报错
例如 url = reverse(‘y_m’,args=(3333,))

命名空间 当你反向解析不同的app有相同的path匹配规则·会混乱导致无法正确匹配
使用命名空间·进行隔离解决
path(‘blog/’, include((‘blog.urls’,‘app01’)))
在view.py中使用
from
return HttpResponse(reverse(‘app01’:‘index’))

2.0 django版本中path的正则用法 之前是用re_path
path(‘blog/int:year/’,view.year_archive)
ps
1.使用<>从url中捕获值
2.捕获值中可以包含一个转化类型(converter type)·比如使用int:name 捕获一个整数变量
如果没有转换器·将匹配任何字符串·当然也包括了/字符
3.无需添加前导斜杠
默认有5个转化器
str 字符串类型
int 数字类型
slug 匹配字母·数字以及斜杠·下划线组成的字符串
uuid 匹配格式化的uuid
path 匹配任何非空字符串·包含了路径分隔符
如果你想使用是根据需求的特殊格式·那就要用到自定义转化器了
创建一个urlconvert.py的文件

文件的内容需要根据格式来写
class MonConvert:
regex=r"任意正则表达式"
def to_python(self, value):
return int(value)
def to_url(self, value): # 反向解析
return ‘%04d’ % value

使用
from django.urls import path,re,inclue,register_converter
from blog.urlconvert import MonConvert # 根据实际情况导入自己的函数

注册当前定义的转换器

register_converter(MonConvert,‘mm’)
注册后就可以在后面匹配到的值传递到mm变量
这里介绍一下如何实现一个基本功能·这里用到了request函数的一个方法request.method 可获得发送请求的方式进行逻辑处理

功能: 注册
urlpatterns = [
path(‘signup/’, views.signup, name=‘注册页面’),

可以为url进行赋予名字,方便html文件进行调用
注册需要用到一个新的模块去验证是否是正确的
from django.contrib.auth.models import User

def signup(request):
if request.method == “GET”: # get 请求
return render(request, ‘signup.html’)
elif request.method == ‘POST’: # post 请求 用来后续提交
user_name = request.POST[‘用户名’]
password1 = request.POST[‘密码’]
password2 = request.POST[‘确认密码’]
try:
User.objects.get(username=user_name)
return render(request, ‘signup.html’, {‘用户名错误’:‘该用户名已存在’})
except User.DoesNotExist:
if password1 == password2:
User.objects.create_user(username=user_name, password=password1) # 用来创建用户
return redirect(‘主页’)
else:
return render(request, ‘signup.html’, {‘密码错误’ : ‘两次输入的密码不一致!’})

功能:登录
这个需要去验证数据内是否存在这么个用户

from django.contrib import auth

def login(request):
if request.method == “GET”:
return render(request, ‘login.html’)
elif request.method == ‘POST’:
user_name = request.POST[‘用户名’]
pass_word = request.POST[‘密码’]
user = auth.authenticate(username=user_name, password=pass_word) # 进行校验是否存在这个用户
if user is None:
return render(request, ‘login.html’, {‘错误’:‘用户名或者密码错误’}) # 需要在网页中用{ { 错误 }} 进行显示
else:
auth.login(request, user)
return redirect(‘主页’)

功能: 退出
这个当收到的是post请求的时候,返回到主页即可

def logout(request):
if request.method == “POST”:
auth.logout(request) # 使用auth函数的logout方法进行退出
return redirect(‘主页’)

ps: 注意只有登录上的用户才可以看到退出按钮
需要在html文件中加一个if进行判断显示

字数统计

在此处输入文本
<input type="submit" value='统计'>
关于本页

上面就是html语言进行书写了

4.当然我们也可以用同样的方法去写一些功能进行使用(当然这个功能还是要用python函数去写的)

统计结果,总字数为{ {count}}字

回到主页

你的文本

{ { text }} # 这种方式进行表示变量

{% for word,count in sorted %} # 这种方式用来执行函数语句
{ { word }} - { { count }}
{% endfor %}
{ { sorted }}
当你想要在网页中展示一个个人板块的时候

django框架是有很多的app小组件(功能)
我们也可以自己进行创建咱们的功能
当你创建一个django项目的时候·会有一个和主工程一样的名字是共用的·
但是你生成app后·他下面的文件一般是他自己私有的
1.首先自己用命令行去创办一个app

  1. python manage.py startapp (app的名字)
    2).在settings.py文件中去注册创办的app
    ‘gallery.apps.GalleryConfig’ #这是范例在后面需要添加这么一行
    3)在models.py中写具体的功能

description = models.CharField(max_length=100) # 这是以一个描述功能
ps 可以使用__str__进行改变后台显示的标题的名字

创建model.py就要注册model 在admin里面进行注册
在admin里面输入admin.site.register(Gallery) # 别忘记导入Gallery
from models import Gallery

下面要进行迁移到数据库中
1.首先制作迁移文件 # 在命令行使用 python manage.py makemigrations 会在__pycache__下面生成一个pay文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值