Django网站用户系统

1、创建<code>form.py</code>进行注册用户系统表单的建立

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField()

2、在<code>views.py</code>中引入用户验证模块(系统自带)

from django.contrib.auth import authenticate, login
from firstapp.forms import LoginForm

此处firstapp是你建立的应用名字
views.py中代码如下:

def index_login(request):
    context = {}
    if request.method == "GET":
        form = LoginForm
    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user:
                login(request, user)
                return redirect(to='index')
            else:
                return HttpResponse('<b>Not a user</b>')
    context['form'] = form
    return render(request, 'login.html', context)

3、在前端页面显示用户名

当操作完成后,在前端使用
<code>request.user.is_authenticated</code>对登录的user进行用户名和密码的验证,并使用<code>request.user.username</code>进行用户名的显示。

        {% if request.user.is_authenticated %}
            <div class="item">
                <h5 class="ui inverted header">
                        <div class="ui avatar image">
                            <img src="{% static 'images/default.png' %}" alt="">
                        </div>
                        <span>{{ request.user.username }}</span>
                    </h5>
            </div>
            <div class="item">
                <a href="#logout/" class="ui inverted circular button">Logout</a>
            </div>
        {% else %}
            <div class="item">
                <h5 class="ui inverted header">
                        <div class="ui avatar image">
                            <img src="{% static 'images/default.png' %}" alt="">
                        </div>
                        <span></span>
                    </h5>
            </div>
            <div class="item">
                <a href="#logout/" class="ui inverted circular button">Login/signup</a>
            </div>
        {% endif %}```

![未登录效果](http://upload-images.jianshu.io/upload_images/2744623-0e433f984c7f44d6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![登录后效果](http://upload-images.jianshu.io/upload_images/2744623-566216d9d9befe43.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#4、自定义用户头像
在models.py中添加

from django.contrib.auth.models import User
class UserProfile(models.Model):
belong_to = models.OneToOneField(to=User, related_name="profile1")
profile_image = models.ImageField()


在setting.py中添加上传的目录

MEDIA_URL = '/upload/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')


在urls.py中添加:

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

完毕后,在模板中
    {% if request.user.is_authenticated %}
        <div class="item">
            <h5 class="ui inverted header">
                    <div class="ui avatar image">
                    {% if request.user.profile1.profile_image %}
                    <img src="/upload/{{ request.user.profile1.profile_image }}" alt="">
                    {% else %}
                    <img src="{% static 'images/default.png' %}" alt="">
                    {% endif %}

                        
                    </div>
                    <span>{{ request.user.username }}</span>
                </h5>
        </div>
        <div class="item">
            <a href="#logout/" class="ui inverted circular button">Logout</a>
        </div>
    {% else %}
        <div class="item">
            <h5 class="ui inverted header">
                    <div class="ui avatar image">
                        <img src="{% static 'images/default.png' %}" alt="">
                    </div>
                    <span></span>
                </h5>
        </div>
        <div class="item">
            <a href="#logout/" class="ui inverted circular button">Login/signup</a>
        </div>
    {% endif %}
在后台上传头像后,显示结果如下:

![ 上传头像](http://upload-images.jianshu.io/upload_images/2744623-89e9fdc4df39d71a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![头像显示](http://upload-images.jianshu.io/upload_images/2744623-daf13ec195f215d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#5、注册与登出
使用Django自带表格
`from djagno.contrib.auth.forms import UserCreationForm, AuthenticationForm`
这是django自带表格,分别为创建用户表格和验证用户表格

def index_login(request):#登录验证表单
context = {}
if request.method == "GET":
form = AuthenticationForm
if request.method == "POST":
form = AuthenticationForm(data=request.POST)
if form.is_valid():
login(request, form.get_user())
return redirect(to='index')
context['form'] = form
return render(request, 'login.html', context)

def index_register(request):#创建用户表单
context = {}
if request.method == "GET":
form = UserCreationForm
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect(to='list')
context['form'] = form
return render(request, 'login.html', context)
```
对urls.py进行操作,写出相应url


from django.contrib.auth.views import logout

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', index, name="index"),
    url(r'^detail/(?P<id>\d+)/$', detail, name="detail"),
    url(r'^comment/(?P<id>\d+)/$', comment, name="comment"),
    url(r'^login/$', index_login, name="login"),
    url(r'^register/$', index_register, name="register"),
    url(r'^logout/$', logout,{'next_page': '/register'}, name="logout"),
]

此处使用系统自带的logout模块
引入刚才在views.py中的index_login, index_register并写入相应的url。
在前端登录代码如下:
<a href="{% url 'logout' %}" class="ui inverted circular button">Logout</a>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容