一个初学者的辛酸路程-继续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的创始人,吉多范罗苏 ...
随机推荐
- Android(java)学习笔记72:ProgressBar的使用
1. ProgressBar使用 首先我们看例程如下: (1) main.xml文件如下: <?xml version="1.0" encoding="utf-8& ...
- 2018.7.22 Jdom与dom的区别
SAX 优点:①无需将整个文档加载到内存,因而内存消耗少 ②推模型允许注册多个ContentHandler 缺点:①没有内置的文档导航支持 ②不能够随机访问XML文档 ③不支持在原地修改XML ④不支 ...
- 剑指offer39 平衡二叉树
剑指上用了指针传递,这里用的引用传递 class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { ; return IsB ...
- ioc 的好文章 转自 GavinJun
https://www.cnblogs.com/fuchongjundream/p/3873073.html
- CCF CSP 201712-2 游戏
题目链接:http://118.190.20.162/view.page?gpid=T67 问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐 ...
- 统计函数运行时间-CPU端
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock( void ); 这个函数返回从“开启这个程序 ...
- phpMyAdmin提示找不到mcrypt和mbstring模块
yum install php-mcryptyum install php-mbstringphp -m 查看是否安装成功 service httpd restart 重启服务器 注: 这里可能会出现 ...
- 瓣呀,一个基于豆瓣api仿网易云音乐的开源项目
整体采用material design 风格,本人是网易云音乐的粉丝,所以界面模仿了网页云音乐,另外,项目中尽量使用了5.0之后的新控件. 项目整体采用mvp+rxjava+retrofit 框架,使 ...
- Hibernate 异常总结
异常一 异常一 异常描述: Sax解析异常:cvc-复杂的类型,发现了以元素maping开头的无效内容,应该是以 ‘{“http://www.hibernate.org/xsd/orm/cfg“:pr ...
- vue学习之路 - 0.背景
1 单页面应用程序 Single Page Application (SPA) 从字面意义来看就是一个网站就一个页面,如: coding 网易云音乐 极致的用户体验,就像nativeapp一样 优点: ...