Django开发笔记三
1、基于类的方式重写登录:views.py:
from django.views.generic.base import View class LoginView(View):
def get(self,request):
return render(request, "test/login.html", {}) def post(self,request):
user_name = request.POST.get("username", "")
pass_word = request.POST.get("password", "")
user = authenticate(username=user_name, password=pass_word) if user is not None:
dj_login(request, user)
return render(request, "test/index.html", {})
else:
return render(request, "test/login.html", {"msg": "用户名或密码错误"})
users.py:
url(r'^login/$', LoginView.as_view(), name="login"),
2、用python变量描述文件路径,方便统一修改
<a style="color:white" class="fr registerbtn" href="{% url 'register' %}">注册</a>
<a style="color:white" class="fr loginbtn" href="/login/">登录</a>
{% load staticfiles %}
......
<link rel="stylesheet" type="text/css" href="/static/css/test/reset.css">
<link rel="stylesheet" type="text/css" href="/static/css/test/animate.css">
<link rel="stylesheet" type="text/css" href="{% static 'css/test/style.css'%}">
3、验证码
django-simple-captcha文档:http://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation
urls.py:
urlpatterns = [
url(r'^captcha/', include('captcha.urls')), ]
settings.py:
INSTALLED_APPS = [
'captcha', ]
forms.py:
class RegisterForms(forms.Form):
email = forms.CharField(required=True)
password = forms.CharField(required=True, min_length=6)
captcha = CaptchaField()
views.py:
class RegisterView(View):
def get(self, request):
register_forms = RegisterForms()
return render(request, "test/register.html", {"register_forms": register_forms}) def post(self, request):
register_forms = RegisterForms(request.POST)
if register_forms.is_valid():
email = request.POST.get("email", "")
pass_word = request.POST.get("password", "")
if UserProfile.objects.filter(email=email):
return render(request, "test/register.html", {"msg": "邮箱已被注册"})
else:
user_profile = UserProfile()
user_profile.username = email
user_profile.email = email
user_profile.password = make_password(pass_word)
user_profile.save()
return render(request, "test/login.html", {}) else:
return render(request, "test/register.html", {"register_forms": register_forms})
register.html:
<form id="email_register_form" method="post" action="/register/" autocomplete="off">
<div class="form-group marb20 ">
<label>邮 箱</label>
<input type="text" id="id_email" name="email" value="" placeholder="请输入您的邮箱地址" />
</div>
<div class="form-group marb8 ">
<label>密 码</label>
<input type="password" id="id_password" name="password" value="" placeholder="请输入6-20位非中文字符密码" />
</div>
<div class="form-group marb8 captcha1 ">
<label>验 证 码</label> {{ register_forms.captcha }}
</div>
<div class="error btns" id="jsEmailTips"></div>
<div class="auto-box marb8">
</div>
<input class="btn btn-green" id="jsEmailRegBtn" type="submit" value="注册并登录" />
{% for key ,error in register_forms.errors.items %}{{ error }}{% endfor %}{{ msg }}
{% csrf_token %}
</form>
4、文件上传:
settings.py
MEDIA_URL = '/static/images/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images/')
models.py:
image = models.ImageField(upload_to="course/%y/%m", verbose_name=u"封面图", max_length=100)
html显示:
{% for video in video_list%}
<div class="item">
<a href="">
<img src="{{ MEDIA_URL }}{{ video.image }}">
<p class="title">{{ video.name }}</p>
</a>
</div>
{% endfor %}
需要在settings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
.......
'django.template.context_processors.media', # 配置html页面获取MEDIA_URL路径
],
},
},
]
Django开发笔记三的更多相关文章
- Django开发笔记六
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...
- Django开发笔记五
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...
- Django开发笔记四
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.邮箱激活 users app下,models.py: ...
- Django开发笔记二
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...
- Django开发笔记一
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.运行 python manage.py runser ...
- Django开发笔记(一)
Django开发笔记(一) 标签(空格分隔): Django Python 1. 创建并运行Django项目 创建开发环境 安装Django pip install django==version 执 ...
- Django开发笔记之数据库的设计
后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原 ...
- Django开发笔记
django基础之视图 1.在Django中网页前端的页面和其他内容都是由视图来传递的(视图对web请求进行回应)Django通过检查请求的URL(准确地说,是URL里域名之后的那部分)来选择使用哪个 ...
- RBL开发笔记三
2014-08-26 20:06:24 今天就是在开发这个EPOLL来处理网络事件 封装较为健壮的EPOLL模型来处理基本的网络IO 1) 超时这个主题先没有弄 在开发EPOLL包括select/po ...
随机推荐
- day6 字典
字典的创建方式 注意 字典是无序的 1. dic{"name":"yang","age":35} 常用还是用这个 2. dic3 = dic ...
- Inside JVM 内存模型
Inside JVM 内存模型 来源 原文:https://blog.csdn.net/silentbalanceyh/article/details/4661230 参考:IBM开发中心文档,&l ...
- adb 命令 链接 安装应用
adb connect 192.168.11.1:5555(可省略) adb kill-server 杀掉服务 adb install xxx.apk
- luogu3305/bzoj3130 费用流 (二分答案+dinic)
Bob肯定想挑一个流量最大的边,然后把所有的费用都加给它呗 那Alice就让流量最大的边尽量小呗 那就二分一下答案再dinic呗 #include<bits/stdc++.h> #defi ...
- luogu2279 消防局的设立 (贪心)
按点的深度从大到小排序,每次取出深度最大的那个点,如果它还没被覆盖,就在它爷爷上放一个消防局,这样一定是最优的 为了判定是否被覆盖,可以记录从某点的子树中到这个点的最近消防局的距离dis[](如果没有 ...
- CF1114E Arithmetic Progression(交互题,二分,随机算法)
既然是在CF上AC的第一道交互题,而且正是这场比赛让我升紫了,所以十分值得纪念. 题目链接:CF原网 题目大意:交互题. 有一个长度为 $n$ 的序列 $a$,保证它从小到大排序后是个等差数列.你不知 ...
- 前端学习 -- Html&Css -- 表单
表单的作用就是用来将用户信息提交给服务器的,比如:百度的搜索框 注册 登录这些操作都需要填写表单. 使用form标签创建一个表单,form标签中必须指定一个action属性,该属性指向的是一个服务器的 ...
- 利用NEST2.0 在C#中操作Elasticsearch
前言:本文主要演示了如何通过c#来操作elasticsearch,分两个方面来演示: 索引数据 搜索数据 Note: 注意我索引数据和搜索数据是两个不同的例子,没有前后依赖关系 准备工作:需要在vis ...
- c++ 静态变量报错 undefined reference to static members
c++中静态变量不但要在头文件中declare,还要在实现的cpp中declare.当然也可以赋个初始值. class foo { int _i; public: foo(int i) : _i(i) ...
- centos6.5安装VNC、远程及启动关闭
标签: centos vnc 远程桌面 安装 详解 0.说明 安装服务的过程当中,最好是在联网环境下操作.由于涉及到远程连接的问题,系统的防火墙需要关闭,或者是做好相应的过滤策略.参考了网上很多大牛的 ...