실전 Django: Rango Part4
이 부분에서 우리는 사용자 시스템을 어떻게 설계하는지 배우기 시작할 것이다. Django는'django.contrib.auth'라는 응용을 제공했다. 우리는 이를 이용하여 사용자 등록, 로그인, 로그아웃 등 일련의 기능을 할 수 있다.
17. 사용자 모델
Django 자체 사용자 시스템의 사용자 모델에는 다음과 같은 데이터가 포함되어 있습니다.
rango/models.py:
from django.contrib.auth.models import User
그런 다음 파일 끝에 다음과 같은 항목을 추가합니다.
rango/models.py:
class UserProfile(models.Model):
# , UserProfile Django
user = models.OneToOneField(User)
#
website = models.URLField(blank=True)
picture = models.ImageField(upload_to='profile_images', blank=True)
# __str__ ,
def __str__(self):
return self.user.username
이 두 필드에 'Blank=True' 를 설정했습니다. 글자의 뜻대로 이 필드가 비어 있는 것을 허용하는 리듬입니다.
"ImageField"필드에 "upload to"속성이 있습니다. 사용자 이미지를 저장하는 폴더를 지정합니다. 이 "profile images"라는 폴더는 settings에 저장됩니다.py에 지정된 MEDIAROOT 폴더의 경로는 다음과 같습니다.
rangoproject/media/profile_images/
모델이 완성된 후에 우리는 데이터베이스를 업데이트한 다음dos 명령 알림부호 아래에서 다음과 같은 명령을 실행해야 한다.
$ python manage.py makemigrations rango
dos 명령 프롬프트에서 명령을 계속 실행합니다.
$ python manage.py migrate
18. PIL 설치
Django의 ImageField는 Python의 이미지 라이브러리 PIL을 사용합니다. PIL을 설치하지 않았다면 먼저 설치해야 합니다.
Windows 플랫폼의 Python 3.2 환경에서는 이 버전을 설치하는 것이 좋습니다.
https://pypi.python.org/pypi/Pillow/2.6.0
그중의 Pillow - 2.6.0을 찾으세요.win32-py3.2.exe(md5), 다운로드한 후 바로 설치하면 됩니다.Python 32비트 버전입니다.
19. 관리 인터페이스에 UserProfile 등록
rango/admin 편집py 파일을 다음과 같이 만듭니다.
rango/admin.py:
from django.contrib import admin
from rango.models import Category, Page
from rango.models import UserProfile
class PageAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'url')
class CategoryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug':('name',)}
admin.site.register(Category, CategoryAdmin)
admin.site.register(Page, PageAdmin)
admin.site.register(UserProfile)
20. 사용자 등록 보기 및 템플릿 만들기
'사용자 등록'기능은 사용자가 우리 사이트에서 계정을 만들 수 있도록 할 것이다. 우리는 이 기능에 보기와 상응하는 템플릿을 추가해야 한다.다음은 완료할 작업입니다.
한 걸음 한 걸음 이 내용들을 실현합시다!rango/forms 편집py 파일을 다음과 같이 만듭니다.
rango/forms.py:
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
fields = ('username', 'email', 'password')
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('website', 'picture')
UserForm과 User ProfileForm 두 개의 폼에 두 개의 메타 클래스를 추가했습니다. 각각의 메타 클래스는 모델 필드를 가지고 있습니다. 이 폼이 데이터베이스에 연결될 테이블을 알려 줍니다. 예를 들어 UserForm이 연결될 테이블이 User 테이블입니다.
마지막으로forms를 잊지 마세요.py 머리를 다음과 같이 변경합니다:
rango/forms.py:
from django import forms
from django.contrib.auth.models import User
from rango.models import Category, Page, UserProfile
위의 이것들을 다 하고 우리는 사용자 등록 보기를 만들 것이다.
rango/views 편집py, 다음을 추가합니다.
rango/views.py:
from rango.forms import UserForm, UserProfileForm
def register(request):
# registered: .
# False, True
registered = False
# HTTP POST , .
if request.method == 'POST':
# 。
# UserForm UserProfileForm .
user_form = UserForm(data=request.POST)
profile_form = UserProfileForm(data=request.POST)
# ...
if user_form.is_valid() and profile_form.is_valid():
# .
user = user_form.save()
# set_password .
# .
user.set_password(user.password)
user.save()
# UserProfile .
# commit False.
# , 。
profile.user = user
# ( )?
# , .
if 'picture' in request.FILES:
profile.picture = request.FILES['picture']
# UserProfile .
profile.save()
# registered , True, .
registered = True
#
# .
else:
print(user_form.errors, profile_form.errors)
# HTTP POST , , .
else:
user_form = UserForm()
profile_form = UserProfileForm()
# .
return render(request,
'rango/register.html',
{'user_form': user_form, 'profile_form': profile_form, 'registered': registered} )
다음에 등록 템플릿을 만들고templates/rango/register를 만듭니다.html
templates/rango/register.html:
DOCTYPE html>
<html>
<head>
<title>Rangotitle>
head>
<body>
<h1> Rangoh1>
{% if registered %}
Rango : <strong> !strong>
<a href="/rango/"> .a><br />
{% else %}
Rango : <strong> !strong><br />
<form id="user_form" method="post" action="/rango/register/"
enctype="multipart/form-data">
{% csrf_token %}
` user_form`.`as_p `
` profile_form`.`as_p `
<input type="submit" name="submit" value=" " />
form>
{% endif %}
body>
html>
보기와 템플릿이 모두 끝났습니다. URL 매핑을 처리하고 그것들을 연결해야 합니다.rango/urls 편집py, 다음과 같이 변경:
rango/urls.py:
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^about/$', views.about, name='about'),
url(r'^category/(?P\w+)$ ', views.category, name='category'),
url(r'^add_category/$', views.add_category, name='add_category'),
url(r'^category/(?P\w+)/add_page/$ ', views.add_page, name='add_page'),
url(r'^register/$', views.register, name='register'), # !
)
마지막으로 우리는 첫 페이지 템플릿(templates/rango/index.html)을 수정하고'등록'링크를 첫 페이지에 두어야 한다.다음을 수행하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
공개 키 암호 "RSA"의 구조 이해공개 키 비밀번호를 사용하는 대략적인 통신 절차를 아는 사람 공개 키 암호에 관심이 있는 사람 RSA 암호화는 다음 공식으로 나타낼 수 있습니다. E 및 N 그룹은 공개 키입니다. 디코딩은 다음과 같은 공식으로 표시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.