一个初学者的辛酸路程-继续Django
- -Http Reponse(字符串)
- -render(request,'/path/a.html')
- 如果有特殊的标签怎么办?
- 如果遇到特殊的标签比如{{ name }} ,他就会把它替换掉,会把name对应的root替换掉
- -render(request,'/path/a.html',{‘name’: ‘root’})
- django-admin startproject mysite ,
- cd mysite python manage.py startapp app01,
- settings.py里面找TEMPLATE里有个DIRS:【os.path.join(BASE_DIR,'templates'),】,
- 跟上一样,settings.py里
- STATICFILES_DIRS = (
- os.path.join(BASE_DIR,'static'),
- )
- 自动: 先创建类==>相当于数据库的表
- 类里的字段代表数据库的列
- class UserInfo:
- username = 字符串
- pwd = 字符串
- age = 数字
- <body>
- <h1>我是大王</h1>
- <h3>{{ k1 }}</h3>
- <h3>{{ k2 }}</h3>
- </body>
- def servers(request):
- # return HttpResponse('OK')
- # return render(request,'servers.html')
- # return render(request,'server.tpl',{})
- # return redirect('http://www.baidu.com')
- # return render(request,'server.txt')
- return render(
- request,
- 'servers.html',
- {
- 'k1':'root',
- 'k2':123,
- 'k3':[11,22,33],
- 'k4':{'name':'alex','age':15},
- }
- )
- class UserInfo(models.Model):
- nid = models.AutoField(primary_key=True)
- username = models.CharField(max_length=32)
- pwd = models.CharField(max_length=64)
- age = models.IntegerField()
- python manage.py makemigrations
- python manage.py migrate
- 把里面的注释掉,添加下面即可。
- django默认链接mysql用的是mysqlDb,这个模块只在Python2有,在Python3没有
- 所以需要吧mysqlDB改成pymysql。
- 就有一个换的过程,如何换?
- 放在django目录下面有一个__init__.py,如下图所示:
- 那么他就会自动修改默认为pymysql来链接数据库。
- from app01 import models
- def servers(request):
- server_list = models.UserInfo.objects.all()
- #得到的是一个对象列表[userinfo(id=1,username=root,age=18),..]
- # for row in server_list:
- # print(row.nid,row.username,row.pwd,row.age)
- return render(request,'servers.html',{'server_list':server_list})
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h1>服务器列表</h1>
- <ul>
- {% for row in server_list %}
- <li>{{ row.nid }}-{{ row.username }}-{{ row.pwd }}-{{ row.age }}</li>
- {% endfor %}
- </ul>
- </body>
- </html>
- def add_user(request):
- if request.method == 'GET':
- return render(request,'add_user.html')
- elif request.method == 'POST':
- u = request.POST.get('user')
- p = request.POST.get('pwd')
- a = request.POST.get('age')
- print(u,p,a)
- #将数据插入数据库
- #方法1
- # obj = models.UserInfo(username=u,pwd=p,age=a)
- # obj.save()
- #方法2
- models.UserInfo.objects.create(username=u,pwd=p,age=a)
- return redirect('/users')
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="/add_user" method="POST">
- <p><input type="text" name="user" placeholder="用户名"></p>
- <p><input type="password" name="pwd" placeholder="密码"></p>
- <p><input type="text" name="age" placeholder="年龄"></p>
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
- <div>
- <a href="/add_user">添加</a>
- </div>
- url(r'^del_user$', views.del_user),
- def del_user(request):
- nnid = request.GET.get('nid')
- # models.UserInfo.objects.all().delete()#删除整个表数据
- models.UserInfo.objects.filter(nid=nnid).delete()
- return redirect('/users')
- <ul>
- {% for row in server_list %}
- <li>{{ row.nid }}-{{ row.username }}-{{ row.pwd }}-{{ row.age }}-<a href="/del_user?nid={{ row.nid }}">删除</a></li>
- {% endfor %}
- </ul>
- url(r'^edit_user$', views.edit_user),
- def edit_user(request):
- if request.method == 'GET':
- nnid = request.GET.get('nid')
- #根据nnid获取单条数据
- # v = models.UserInfo.objects.filter(nid=nnid)
- v = models.UserInfo.objects.filter(nid=nnid).first()
- #获取的是对象列表 [UserInfo(),],永远获取的是一个列表,不是对象,如下
- #<QuerySet [<UserInfo: UserInfo object>]>
- print(v.nid,v.username,v.pwd,v.age)
- return render(request,'edit_user.html',{'obj':v})
- elif request.method == 'POST':
- nnid = request.POST.get('nid')
- u = request.POST.get('user')
- p = request.POST.get('pwd')
- a = request.POST.get('age')
- #方法1
- # obj = models.UserInfo.objects.filter(nid=nnid).first()
- # obj.username = u
- # obj.pwd = p
- # obj.age = a
- # obj.save()
- models.UserInfo.objects.filter(nid=nnid).update(username=u,pwd=p,age=a)
- return redirect('/users')
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="/edit_user" method="POST">
- <p style="display: none;"><input type="text" name="nid" placeholder="ID" value="{{ obj.nid }}"></p>
- <p><input type="text" name="user" placeholder="用户名" value="{{ obj.username }}"></p>
- <p><input type="password" name="pwd" placeholder="密码" value="{{ obj.pwd }}"></p>
- <p><input type="text" name="age" placeholder="年龄" value="{{ obj.age }}"></p>
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
- url(r'^edit_user$', views.edit_user),
- url(r'^edit_user-(\d+).html$', views.edit_user),
- def edit_user(request,a1):
- print(a1)
- return HttpResponse(a1)
- def edit_user(request,a1,a2):
- print(a1,a2)
- return HttpResponse(a1+'--'+a2)
- url(r'^edit_user-(\d+)-(\d+).html$', views.edit_user),
- 但是它这个是按照顺序传送的,通过这种方式也可以传值,但是呢,他是依赖顺序的。
- url(r'^edit_user-(?P<n1>\d+)-(?P<n2>\d+).html$', views.edit_user),
- def edit_user(request,n1,n2):
- print(n1,n2)
- return HttpResponse(n1+'--'+n2)
- def edit_user_new(request,nnid):
- if request.method == 'GET':
- obj = models.UserInfo.objects.filter(nid=nnid).first()
- return render(request,'edit_user_new.html',{'obj':obj})
- elif request.method == 'POST':
- u = request.POST.get('user')
- p = request.POST.get('pwd')
- a = request.POST.get('age')
- models.UserInfo.objects.filter(nid=nnid).update(username=u,pwd=p,age=a)
- return redirect('/users')
- url(r'^edit_user_new-(?P<nnid>\d+).html$', views.edit_user_new),
- <body>
- <h1>新</h1>
- <form method="POST" action="edit_user_new-{{ obj.nid }}.html">
- {# <p style="display: none;"><input type="text" name="nid" placeholder="ID" value="{{ obj.nid }}"></p>#}==>这个就不需要了
- <p><input type="text" name="user" placeholder="用户名" value="{{ obj.username }}"></p>
- <p><input type="password" name="pwd" placeholder="密码" value="{{ obj.pwd }}"></p>
- <p><input type="text" name="age" placeholder="年龄" value="{{ obj.age }}"></p>
- <input type="submit" value="提交">
- </form>
- </body>
- <form method="POST" action="{% url "nnn" nnid=obj.nid %}">
- url(r'^edit_user_new-(?P<nnid>\d+).html$', views.edit_user_new,name='nnn'),
- url(r'^app01/',include('app01.urls')),
- url(r'^app02/',include('app02.urls')),
- url(r'^app03/',include('app03.urls')),
- url(r'^app01/',include('app01.urls')),
- url(r'^app02/',include('app02.urls')),
- url(r'^test$', views.test),
- def upload(request):
- if request.method == 'GET':
- return render(request,'upload.html')
- elif request.method == 'POST':
- obj = request.FILES.get('fafafa')
- import os
- f = open(os.path.join('upload',obj.name),'wb')
- for line in obj.chunks():
- f.write(line)
- f.close()
- return HttpResponse('test')
- {% else %}
- {{ item }}
- {% endfor %}
- 截取前30个单词
- 写个URL
- url(r'^tpl.htm$', views.tpl),
- 写个views
- def tpl(request):
- return render(request,'tpl.html',{'summary':'dfdsfdsffffffffffdddddddddddfdfd'})
- 写个HTML
- <body>
- {{ summary }}
- <br/>
- {{ summary|truncatechars:8 }}
- </body>
- 注意上面的取字符的8前面不要有空格,不然会报错
- 效果如下:
- Invalid filter
- from django import template
- register = template.Library()
- @register.filter
- def ji(value):
- return 'jijiji'
- {{ summary|ji:888 }}
- from django.utils.safestring import mark_safe
- {% test 1 2 3 %}
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- body{
- margin:0;
- }
- .pg-header{
- height:48px;
- color: white;
- }
- .pg-body .menus{
- width:20%;
- float: left;
- height:500px;
- }
- .pg-body .contents{
- width:80%;
- float: left;
- }
- </style>
- {% block css %}{% endblock %}
- </head>
- <body>
- <div class="pg-header"></div>
- <div class="pg-body">
- <div class="menus"></div>
- <div class="contents">
- {% block bd %}{% endblock %}
- </div>
- </div>
- {% block js %}{% endblock %}
- </body>
- </html>
- {% extends 'layout.html' %}
- {% block css %}
- <style></style>
- {% endblock %}
- {% block bd %}
- <h1>组列表</h1>
- {% endblock %}
- {% block js %}
- <script></script>
- {% endblock %}
- def login(request):
- if request.method == 'GET':
- return render(request,'login.html')
- elif request.method == 'POST':
- u = request.POST.get('user')
- p = request.POST.get('pwd')
- obj = models.UserInfo.objects.filter(username=u,pwd=p).first()
- #models.UserInfo.objects.filter(username=u,pwd=p).count()
- if obj:
- # 在请求者口袋放东西
- import datetime
- d = datetime.datetime.utcnow()
- m = datetime.timedelta(seconds=10)
- end = d + m
- obj = redirect('/users')
- obj.set_cookie(key='user_name',value=u,max_age=10,expires=end)
- return obj
- else:
- return render(request,'login.html',{'msg':'用户名或密码错误'})
- def users(request):
- #如果去摸口袋,有就登录,没有就重定向到login页面
- v = request.COOKIES.get('user_name')
- if not v:
- return redirect('/login')
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="/login" method="POST">
- <p><input type="text" name="user"></p>
- <p><input type="password" name="pwd"></p>
- <input type="submit" value="登录"> {{ msg }}
- </form>
- </body>
- </html>
- request.session['username'] = u
- def login(request):
- if request.method == 'GET':
- return render(request,'login.html')
- elif request.method == 'POST':
- u = request.POST.get('user')
- p = request.POST.get('pwd')
- obj = models.UserInfo.objects.filter(username=u,pwd=p).first()
- #models.UserInfo.objects.filter(username=u,pwd=p).count()
- if obj:
- obj = redirect('/users')
- # 在请求者口袋放东西
- request.session['username'] = u
- return obj
- else:
- return render(request,'login.html',{'msg':'用户名或密码错误'})
- def users(request):
- #如果去摸口袋,有就登录,没有就重定向到login页面
- v = request.session.get('username')
- if not v:
- return redirect('/login')
一个初学者的辛酸路程-继续Django的更多相关文章
- 一个初学者的辛酸路程-依旧Django
回顾: 1.Django的请求声明周期? 请求过来,先到URL,URL这里写了一大堆路由关系映射,如果匹配成功,执行对应的函数,或者执行类里面对应的方法,FBV和CBV,本质上返回的内容都是字符串 ...
- 一个初学者的辛酸路程-初识Django
前言: 主要是关于JavaScript的高级部分以及Django 主要内容: 一.jQuery 事件绑定: DOM事件绑定: -直接在标签上绑定 第一种: $('.title').click(func ...
- 一个初学者的辛酸路程-基于Django写BBS项目
前言 基于Django的学习 详情 登录界面 找个模板 http://v3.bootcss.com/examples/signin/ 右键,检查源码 函数 def login(request) ...
- 一个初学者的辛酸路程-python操作SQLAlchemy-13
前言 其实一开始写blog,我是拒绝的,但是,没办法,没有任何理由抗拒.今天呢,要说的就是如何使用Python来操作数据库. SQLAlchemy SQLAlchemy是Python编程语言下的一款O ...
- 一个初学者的辛酸路程-FTP-9
前言 今天,我要描述一个FTP的故事 主要内容 嗯,今天主要以阶梯性的形式来做一个FTP项目. 第一步: 我要实现这么一个功能,一个FTP客户端,1个FTP服务端,2端建立连接以后可以进行通讯. 服务 ...
- 一个初学者的辛酸路程-socket编程-8
前言: 你会发现会网络是多么幸福的事情 主要内容: socket 概念: socket本质上就是2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递.我们知道网络通信都是基于 ...
- 一个初学者的辛酸路程-Python基础-3
前言 不要整天沉迷于学习-. 字典 一.我想跟你聊聊字典 1.为何要有字典? 大家有没有想过为什么要有字典?有列表不就可以了吗? 也许大家会这么认为,我给大家举个例子,大家就明白了. 比如说,我通讯录 ...
- 一个初学者的辛酸路程-了解Python-2
前言 blog花了一上午写的,结果笔记本关机了,没有保存,找不到了,找不到了啊,所以说,你看的每一篇blog可能都是我写了2次以上的--.哎!! 代码改变世界,继续......... Python基础 ...
- 一个初学者的辛酸路程-初识Python-1
前言 很喜欢的一句话,与诸位共勉. 人的一切痛苦,本质上都是对自己无能的愤怒----王小波. 初识Python 一.它的爸爸是谁 首先,我们需要认识下面这位人物. 他是Python的创始人,吉多范罗苏 ...
随机推荐
- The service command supports only basic LSB actions (start, stop, restart, try-restart, reload,force-reload, status)
# service iptables save The service command supports only basic LSB actions (start, stop, restart, t ...
- php简单开启gzip压缩方法(zlib.output_compression)
网上的教程基本是你抄我来我抄他,不外乎加头加尾或者自构函数两种写法.实际上每个php页面都要去加代码——当然也可以include引用,不过总显得略微麻烦 一般而言,页面文件开启gzip压缩以后,其 ...
- 近期流行的JavaScript框架与主题
[新年快乐]2017年你应该关注的JavaScript框架与主题 2017-01-01 王下邀月熊 JavaScript JavaScript的繁荣促生了很多优秀的技术.框架与工具库,这空前的繁荣也给 ...
- python读取mat文件
一.mat文件 mat数据格式是Matlab的数据存储的标准格式.在Matlab中主要使用load()函数导入一个mat文件,使用save()函数保存一个mat文件.对于文件 load('data.m ...
- miller——rabin
突然发现自己在线性筛素数中有这个,忘了好久: #include<iostream> #include<cstdio> using namespace std; long lon ...
- 解决windows下Composer因php_openssl扩展缺失而安装失败的问题
Composer( https://getcomposer.org/ )是PHP下的一个依赖管理工具.你可以在你的项目中声明你所需要用到的类库,然后Composer会在项目中为你安装它们.如果你了解N ...
- python——文件处理
1.文件处理 f = open(file="file01.txt", mode="r", encoding="utf-8") #python ...
- Login用户登录(Python实现)
username_fault = "isuperSun" #程序存储用户名和密码 password_fault = " counts = 0 while counts&l ...
- 在VSCode中使用码云
在VSCode中使用码云 一.SSH公钥 使用SSH公钥可以让你在你的电脑和码云通讯的时候使用安全连接(Git的Remote要使用SSH地址) 链接 https://gitee.com/profile ...
- Linux文件系统与目录结构
在Linux系统中,目录被组织成一个:单根倒置树结构,文件系统从根目录开始,用/来表示.文件名称区分大小写( 大小写敏感还需要看具体的文件系统格式 ),以.开头的为隐藏文件,路径用/来进行分割(win ...