Не получается получить угловые данные для загрузки маршрутов - PullRequest
0 голосов
/ 18 мая 2018

Я создаю локальную страницу после этого учебника , и она реализует вход в систему с использованием django и angular.Но я не могу заставить кнопку зарегистрироваться что-либо показать.Он просто меняет каталог на / register.Я думаю, что это связано с маршрутизацией.Я не получаю ошибок.И я больше не знаю, как отлаживать эту вещь, поэтому у меня закончились варианты.Это мой первый «веб-сайт».

Причина, по которой все идет не так, потому что я не получил стартовый проект, с которым пришло руководство.Я хотел узнать, как реализовать это с нуля.Это означает, что мои пакеты более новые (bootstrap, django и т. Д.).Дайте мне знать, если вам нужна дополнительная информация, пожалуйста.Спасибо.

/ templates / index.html

<!DOCTYPE html>
<html ng-app="hawk">

<head>
  <title>Hawk</title>
  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
</head>

<body>
  {% include 'navbar.html' %}

  <div class="container-fluid">
    <div class="row">
      <div class="col-xs-12 ng-view"></div>
    </div>
  </div>

  {% include 'javascripts.html' %}
</body>

</html>

/ static / javascripts / hawk.routes.js

(function () {
    'use strict';

    angular
        .module('hawk.routes')
        .config(config);

    config.$inject = ['$routeProvider'];

    function config($routeProvider) {
        $routeProvider.when('/register', {
            controller: 'RegisterController',
            controllerAs: 'vm',
            templateUrl: '/static/templates/authentication/register.html'
        }).otherwise('/');
    }
})();

/ static / javascripts / аутентификация / контроллеры/register.controller.js

(function () {
    'use strict';

    angular
        .module('hawk.authentication.controllers')
        .controller('RegisterController', RegisterController);

    RegisterController.$inject = ['$location', '$scope', 'Authentication'];

    function RegisterController($location, $scope, Authentication) {
        var vm = this;
        console.log("\n\nregister\n\n");
        vm.register = register;

        function register() {
            Authentication.register(vm.email, vm.password, vm.username);
        }
    }
})();

/ static / javascripts / hawk.js

(function () {
  'use strict';

  angular
    .module('hawk', [
      'hawk.routes',
      'hawk.authentication',
      'hawk.config',
    ]);

  angular
    .module('hawk.routes', [require('angular-route')]);
  angular
    .module('hawk.config', []);
  angular
    .module('hawk')
    .run(run);
  run.$inject = ['$http'];

  function run($http) {
    $http.defaults.xsrfHeaderName = 'X-CSRFToken';
    $http.defaults.xsrfCookieName = 'csrftoken';
  }
})();

/ templates / javascripts.html

{% load compress %} {% load staticfiles %} {% compress js %}
<script type="text/javascript" src="{% static '../node_modules/jquery/dist/jquery.js' %}"></script>
<script type="text/javascript" src="{% static '../node_modules/bootstrap/dist/js/bootstrap.js' %}"></script>
<script type="text/javascript" src="{% static '../node_modules/bootstrap-material-design/dist/js/material.js' %}"></script>
<script type="text/javascript" src="{% static '../node_modules/bootstrap-material-design/js/ripples.js' %}"></script>
<script type="text/javascript" src="{% static '../node_modules/underscore/underscore.js' %}"></script>

<script type="text/javascript" src="{% static '../node_modules/angular/angular.js' %}"></script>
<script type="text/javascript" src="{% static '../node_modules/angular-route/angular-route.js' %}"></script>
<script type="text/javascript" src="{% static '../node_modules/angular-cookies/angular-cookies.js' %}"></script>

<script type="text/javascript" src="{% static '../node_modules/ng-dialog/js/ngDialog.js' %}"></script>
<script type="text/javascript" src="{% static 'lib/snackbarjs/snackbar.min.js' %}"></script>

<script type="text/javascript" src="{% static 'javascripts/hawk.js' %}"></script>

<script type="text/javascript" src="{% static 'javascripts/hawk.config.js' %}"></script>
<script type="text/javascript" src="{% static 'javascripts/hawk.routes.js' %}"></script>
<script type="text/javascript" src="{% static 'javascripts/authentication/authentication.module.js' %}"></script>
<script type="text/javascript" src="{% static 'javascripts/authentication/services/authentication.service.js' %}"></script>
<script type="text/javascript" src="{% static 'javascripts/authentication/controllers/register.controller.js' %}"></script> 
{% endcompress %}

/ static /javascripts / authentication / services / authentication.service.js

(function () {
    'use strict';
    angular
        .module('hawk.authentication.services')
        .factory('Authentication', Authentication);
    Authentication.$inject = ['$cookies', '$http'];

    function Authentication($cookies, $http) {
        var Authentication = {
            register: register
        };

        return Authentication;

        function register(email, password, username) {
            return $http.post('/api/v1/accounts/', {
                username: username,
                password: password,
                email: email
            });
        }
    }
})();

/ HawkProject / urls.py

from django.contrib import admin
from django.urls import path, re_path, include
from rest_framework_nested import routers
from authentication.views import AccountViewSet
from HawkProject.views import IndexView

router = routers.SimpleRouter()
router.register(r'accounts', AccountViewSet)

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^api/v1/', include(router.urls)),

    re_path(r'^.*$', IndexView.as_view(), name='index')
]

1 Ответ

0 голосов
/ 18 мая 2018

Хотя это и не точный ответ на этот вопрос, но ответ с подходом diff

Учебное пособие, которое вы предоставили, слишком длинное и не включено в видео.Я работал над Django и AngularJS, чтобы создать сайт электронной коммерции.Я бы посоветовал вам не смешивать Django и AngularJS как можно больше, чтобы избежать конфликтов.При этом я кратко предоставлю вам то, что я реализовал для User Registration:

  1. Я держал форму пользователя отдельно от форм AngularJS, потому что Django имеет свой собственный способ управления пользовательским управлением (Войдите, зарегистрируйтесь, сессия (используя @login_required) и т. Д.).

  2. Я предоставил <a href="/sign_up">Register</a> на панели навигации.( Примечание: /signup - это URL, отображенный в urls.py файле)

        <form name="regForm" class="form-signup" action="/sign_up/" method="post" role="form" onsubmit="return validateForm()">
            {% csrf_token %}
            {{form.errors.values.0}}
            <div class="form-group reg-username" id="fname">
                <div>
                    <input name="first_name" class="form-control input" size="20" placeholder="Enter First Name" type="text" required>
                </div>
                <p id="fname-error" class="help-block"></p>
            </div>
            <div class="form-group reg-username">
                <div>
                    <input name="last_name" class="form-control input" size="20" placeholder="Enter Last Name" type="text" required>
                </div>
            </div>
            <div class="form-group reg-email">
                <div>
                    <input name="email" class="form-control input" placeholder="Enter Email" type="email" required>
                </div>
            </div>
            <div class="form-group reg-password" id="pwd1">
                <div>
                    <input name="password1" class="form-control input" placeholder="Password" type="password" required>
                </div>
                <p id="pwd-error1" class="help-block"></p>
            </div>
            <div class="form-group reg-password" id="pwd2">
                <div>
                    <input name="password2" class="form-control input" placeholder="Confirm Password" type="password" required>
                </div>
                <p id="pwd-error2" class="help-block"></p>
            </div>
            <input name="submit" class="btn  btn-block btn-lg btn-primary" value="REGISTER" type="submit">
    
        </form>
    

Где url(r'^sign_up/', ('ecommerce.views.register_user')),

В views.py

@sensitive_post_parameters()
@csrf_protect
@requires_csrf_token
def register_user(request):
    args = {}
    args.update(csrf(request))
    if request.method == 'POST':

        if not verify_google_recaptcha(request.POST):
            return HttpResponse(get_status_response('Failure', 'Are you sure you are not a robot?'))
        else:
            logger.info('Recaptcha passed !!!')

        form = RegistrationForm(request.POST)
        msg = 'register'
        args['form'] = form

        if form.is_valid():

            try:
                # username = form.cleaned_data['username']
                email_obj ={}
                email_obj['email'] = form.cleaned_data['email']
                email_obj['first_name'] = form.cleaned_data['first_name']
                email_obj['last_name'] = form.cleaned_data['last_name']

                salt = hashlib.sha1(str(random.random())).hexdigest()[:5]
                activation_key = hashlib.sha1(salt + email_obj['email']).hexdigest()

                email_obj['activation_link'] = ACTIVATION_LINK.format(activation_key)

                template = get_template('RegistrationLink.html')
                context = Context({'email': email_obj})
                content = template.render(context)

                emsg = EmailMultiAlternatives('Activation link for {0}'.format(DEFAULT_DOMAIN) , content, DEFAULT_FROM_EMAIL, to=[email_obj['email']])

                emsg.attach_alternative(content, "text/html")
                emsg.send()

                form.save()  # save user to database if form is valid

                # Get user by username
                user = SiteUser.objects.get(email=email_obj['email'])

                # Create and save user profile
                new_profile = UserProfile(user=user, activation_key=activation_key,
                                          key_expires=settings.EXPIRATION_DAYS)
                new_profile.save()
            except Exception as e:
                logger.exception(e)
                return render_to_response('500.html')

            # return HttpResponseRedirect('/register_success')
            return render_to_response('confirm.html', {'msg': msg})
    else:
        args['form'] = RegistrationForm()

    return render_to_response('userRegistration.html', args, context_instance=RequestContext(request))

Примечание. Код, написанный на def register_user, является основной функцией Djnago для обработки регистрации пользователей, которую я использую.Вы можете получить их через Интернет

Если вам нужно отрендерить любой form, например Order address, создайте форму углового и простого передачи значения в Django, используя $http (/url_called из $http будетотображаться в urls.py).

Убедитесь, что вы используете {% verbatim %} и {% endverbatim %} всякий раз, когда вы используете {{ some_angular_variable }} because it contradicts with Шаблон Django syntax. Better to go for ng-bind`как вы можете.

Пока игнорируйте $locationProvider, если вы находитесь на начальной стадии.Вы получите некоторые проблемы при использовании этого с Django.У меня есть решение для этого, но для новичка, не вдавайтесь в это.Попробуйте интегрировать код plunkr в свое приложение Django и посмотрите, работает ли он.Начните с малого, не переходите к сложным примерам.

Проверьте один базовый пример ngRoute .

Inесли вы застряли, задайте другой вопрос и поместите ссылку в комментарии, чтобы я также мог вам в этом помочь

...