2.4.4.1、Django新建APP(acounts)

$django-admin.py startapp accounts

在oss/accounts修改forms.py(新建)和views.py如下:

注:绿字部分为注释

views.py

################################################################

#coding=utf-8
from django.core.urlresolvers import reverse
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.contrib import messages
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login as auth_login ,logout as auth_logout
from django.utils.translation import ugettext_lazy as _
from forms import RegisterForm,LoginForm

def index(request):
    ‘‘‘首页视图‘‘‘
    template_var={"w":_(u"欢迎您,请登录!")}//初始化字典,key=w
    if request.user.is_authenticated()://如果用户登录返回值为1
        template_var["w"]=_(u"欢迎您 %s!")%request.user.username//修改字典key=w对应的值为username
    return render_to_response("accounts/welcome.html",template_var,context_instance=RequestContext(request))//每个视图函数的返回值,具体可参照官方文档,这里表示用accounts/welcome.html模板渲染

def register(request)://注册用户视图
    ‘‘‘注册视图‘‘‘
    template_var={}
    form = RegisterForm()//调用forms.py中RegisterForm() ,初始化form
    if request.method=="POST"://模板register.html用POST方法提交表单
        form=RegisterForm(request.POST.copy())
        if form.is_valid()://判断表单是否有效
            username=form.cleaned_data["username"]//先判断再赋值
            email=form.cleaned_data["email"]
            password=form.cleaned_data["password"]
            user=User.objects.create_user(username,email,password)//调用Django.auth中创建用户的函数创建用户create_user()
            user.save()//存储添加的用户到数据库
            _login(request,username,password)#注册完毕 直接登陆//调用veiws.py中的登录核心方法
            return HttpResponseRedirect(reverse("index"))//登录成功跳转到urls中对应name=index的视图
    template_var["form"]=form//把form中存储的user,password,email记录在字典template_var中
    return render_to_response("accounts/register.html",template_var,context_instance=RequestContext(request))

def login_view(request):
    ‘‘‘登陆视图‘‘‘
    template_var={}
    form = LoginForm()
    if request.method == ‘POST‘:
        form=LoginForm(request.POST.copy())
        if form.is_valid():
            _login(request,form.cleaned_data["username"],form.cleaned_data["password"])
            return HttpResponseRedirect(reverse("index"))
    template_var["form"]=form
    return render_to_response("accounts/login.html",template_var,context_instance=RequestContext(request))

def _login(request,username,password):
    ‘‘‘登陆核心方法‘‘‘
    ret=False
    user=authenticate(username=username,password=password)
    if user:
        if user.is_active:
            auth_login(request,user)//调用Django的login方法(这里是重命名的,参照from XX import XX as xx)
            ret=True
        else:
            messages.add_message(request, messages.INFO, _(u‘用户没有激活‘))
    else:
        messages.add_message(request, messages.INFO, _(u‘用户不存在‘))
    return ret//返回登录状态

def logout_view(request):
    ‘‘‘注销视图‘‘‘
    auth_logout(request)
    return HttpResponseRedirect(reverse(‘index‘))//注销后跳转到index

forms.py

#coding=utf-8
from django import forms
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _

class RegisterForm(forms.Form):
    username=forms.CharField(label=_(u"昵称"),max_length=30,widget=forms.TextInput(attrs={‘size‘: 20,}))
    password=forms.CharField(label=_(u"密码"),max_length=30,widget=forms.PasswordInput(attrs={‘size‘: 20,}))
    email=forms.EmailField(label=_(u"邮件"),max_length=30,widget=forms.TextInput(attrs={‘size‘: 30,}))

    def clean_username(self):
        ‘‘‘验证重复昵称‘‘‘
        users = User.objects.filter(username__iexact=self.cleaned_data["username"])
        if not users:
            return self.cleaned_data["username"]
        raise forms.ValidationError(_(u"该昵称已经被使用请使用其他的昵称"))

    def clean_email(self):
        ‘‘‘验证重复email‘‘‘
        emails = User.objects.filter(email__iexact=self.cleaned_data["email"])
        if not emails:
            return self.cleaned_data["email"]
        raise forms.ValidationError(_(u"该邮箱已经被使用请使用其他的"))

class LoginForm(forms.Form):
    username=forms.CharField(label=_(u"昵称"),max_length=30,widget=forms.TextInput(attrs={‘size‘: 20,}))
    password=forms.CharField(label=_(u"密码"),max_length=30,widget=forms.PasswordInput(attrs={‘size‘: 20,}))

在oss/templates/accounts中添加login.html,register.html和welcome.html

################################################################

login.html

<html lang="en">
<head>
    <title>Account Login</title>
</head>
<body>
    {% if messages %}
<ul>
    {% for message in messages %}
    <li>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}
    <form action="" method="post">
    {% csrf_token %}//防止用户重复非法登录
    <table border="0" cellpadding="0" >
        {{form.as_table}}
    </table>
    <p> <a href="{%url "register_view"%}">注册</a> <a href="{%url "index"%}">返回首页</a> <input type="submit" value="登录"/></p>
    </form>
</body>
</html>

################################################################

Register.html

<html lang="en">
<head>
    <title>用户注册</title>
</head>
<body><form action="" method="post">{% csrf_token %}
    <table border="0" cellpadding="0" >
        {{form.as_table}}
    </table>
    <p> <a href="{% url "login_view" %}">登陆</a> <a href="{% url "index" %}">返回首页</a> <input type="submit" value="注册"/></p>
    </form>
</body>
</html>

################################################################

Welcome.html

<html lang="en">
<head>
    <title>Welcome!</title>
</head>
<body>
    <h2>{{w}}</h2>//调用login视图里的字典(key=w)
    <hr/>
{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}
{% if user.is_authenticated %}
    <a href="{% url "logout_view" %}">注销</a>
    <a href="{% url "index_oss" %}">返回hrloo_oss主页</a>
{% else %}
    <a href="{% url "login_view" %}">登陆</a>  |
    <a href="{% url "register_view" %}">注册</a>
{% endif %}
</body>
</html>

在oss/urls.py 中添加如下url

url(r‘^accounts/login/$‘, ‘oss.accounts.views.login_view‘, name=‘login_view‘),

url(r‘^accounts/logout$‘, ‘oss.accounts.views.logout_view‘, name=‘logout_view‘),

url(r‘^accounts/register$‘, ‘oss.accounts.views.register‘, name=‘register_view‘),

现在启动web服务:python manage.py runserver 10.1.1.145:8000

访问url:http://10.1.1.145:8000/accounts/login 就可以看到登录界面,注册和登出操作访问相应url就可以实现。

2.4.4.1、Django新建APP(acounts)

时间: 2024-12-28 16:04:50

2.4.4.1、Django新建APP(acounts)的相关文章

一步一步分析新建App启动过程

IOS温故而知新(一)  一步一步分析新建App启动过程 笔者接触IOS大概半年的时间,可以说能够开发App,但是又有很多不足的地方,因此打算写一些技术文章,能够达到温故而知新的效果,难免会有错误或者遗漏,也希望各位看官不吝指教.另外宣传一下刚建立的群“IOS菜鸟到高手之路”,312747764,欢迎希望交流分享的人加入. 1.IOS系统的简单说明IOS与Mac OS X以及安卓一样都属于类UINX系统,然而熟悉类UNIX系统的人可能会失望的是,个人开发的App会进入类似chroot的状态,被操

ECSTORE 新建APP应用

1.用命令新建app 1 // ----- window平台 ----- 2 3 直接运行 " 站点根目录/app/base/cmd.bat " 4 出现命令行后输入 dev:new app myapp 5 6 // ----- linux平台 ----- 7 8 终端进入至 " 站点根目录/app/base " 9 运行 cmd dev:new app myapp 2.运行完,命令行工具会创建app/myapp目录,并生成 services.xml 和 app.x

无法使用Django新建项目:&#39;django-admin.py&#39;不是内部或外部命令

问题: 在命令行下无法使用django-admin.py startproject project命令去新建一个Web项目,反而去Django安装目录的bin目录下(例如:D:\Django-1.7\django\bin)使用python django-admin.py startproject project就可以了,每次都要跑到bin目录再用python命令很麻烦,于是找了下才知道是环境变量的问题. 参考:https://docs.djangoproject.com/en/1.5/faq/t

59 Django基础三件套 , 模板{{}}语言 , 程序连mysql Django项目app Django中ORM的使用

主要内容: 1 form表单中提交数据的三要素 form标签必须要有action和method的属性 所有获取用户输入的标签必须放在form表单里,也必须要有那么name属性.因为往后端提交数据的时候name所对应的是关键字, input输入的值为value.在后端显示为字典的模式, 如果不写name关键字,则取不到值. 必须要有submit按钮. 2 Django 基础三件套 from Django.shortcuts import HttpResponse, render, redirect

Django中App的teemplates加载顺序

背景 ??Python版本:3.7 ??Django版本:1.8 做了一个简略的备忘概述,推荐阅读参考链接. 加载顺序 在Django中,App首先访问的templates是在setting中设置的DIRS. 如果DIRS文件夹中找不到模板的话,那么就会去App中去查找模板(不用自己设置是默认的). 但是如果在app的views中设置如下(指定文件夹),那么去查找的就是一个在settings中设置的DIRS文件夹下的test.html,如若找不到,会直接报错.而不会再去APP中去寻找test.h

CMDB3 完善采集端代码(ssh方案的多线程采集), 异常处理, 服务端目录结构的设计(django的app), API数据分析比对入库

完善一下采集端代码 ssh方案的多线程采集 线程和进程,协程的区别 (90% 问到) 提高并发的话,使用多线程 python2 多进程有 多线程没有 python3 多进程有 多线程有 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor p = ThreadPoolExecutor(10) def test(i): time.sleep(1) print(i) for i in range(100): p.s

Django创建App并简单实现登录模块

Django创建App并简单实现登录模块 什么是Django的APP? 此APP非andriodAPP.Django的APP可以理解为一个网站中的一个模块,我们可以将每个模块都单独写成一个APP,这样可以让项目变得相对整洁且更加好维护起来. 如何创建App? 1.创建Django工程 - BlogPorject django-admin startproject BlogPorject 2.创建App django-admin startapp application App目录介绍: appl

Django学习(1)——python manage.py startapp app-name新建app报错问题

作为一个刚接触python的小白,开始学习Django注定前路漫漫,记录一下学习过程中的问题和解决方案. 感谢“自强学堂”的无私奉献,根据教程安装了Django 1.9.12后,尝试新建项目,此时使用python manage.py startapp app-name 一直无法建立app.错误的最后一行是“django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (

Django 创建app 应用,数据库配置

一.create project mkdir jango cd jango 目录创建project myapp django-admin startproject myapp 2.在给project创建app cd myapp 的project下: python manage.py startapp appname 创建一个app python manage.py run server localhost:9999 启动jango server 默认:http://localhost:9999访